Consegue-me explicar isto? Não entendo onde foi buscar o .kCrYT
Eu não consigo encontrar esse elemento .kCrYT no codigo fonte da pagina do google!
deve ter outro nome, procura o elemnto que vc quer buscar e insere ele no seu codigo
Se você no navegador usar a opção Inspecionar não vai aparecer, agora se usar o conteudo antes do navegador exibir atraves do jsoup vai aparecer.
Provavel que o o Site chame alguma função interna que troca o nome, vi que o “kCrYT” no navegador aparece como “r”.
Parece que é a mesmo coisa, mas não necessariamente.
O jsoup obtem o retorno do servidor puro, agora quando vai renderizar esse conteudo, dentro da propria pagina, como Eu disse pode ser chamada alguma função e alterar algumas coisas, seja por segurança ou pelo conjunto interno das coisas.
Desculpa estar a ser chato mas como faço isso? Já pesquisar mas não encontrei nada
Voce tem que interceptar o conteudo apos o retorno do jsoup.
Tem paginas que sim, o mesmo conteudo que vem será o mesmo a ser exibido, mas isso não é uma regra.
Do mais, se você quer pegar o conteúdo exatamente igual está na apresentação da pagina, nesse caso o jsoup não é indicado, embora muitos achem que seja a mesma coisa, mas não, a prova é essa do search do google.
Se quiser pegar exatamente como o navegador apresenta, tem que fazer raspagem usando WebView e WebEngine.
Adaptei o codigo para pesquisar uma palavra no google news e retornar o titulo e o link da noticia. Mas não me retorna nada! O que esta errado? Consegues-me ajudar? Ja intercetei o conteudo pelo jsoup e não ercebo porque nao está a funcionar!
Aqui esta o codigo:
package googlesearch;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javafx.util.Pair;
import javax.swing.text.Document;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class GoogleSearch {
// pattern for extracting the link such as www.codeforeach.com/java/ ( domain
// name + path )compile("([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}(/[^&]*)*");
private static final Pattern p = Pattern
.compile("([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}(/[^&]*)*");
private static String request;
public static void main(String[] args) throws IOException {
Scanner ler = new Scanner(System.in);
System.out.println("Insira a palavra: ");
String pesquisa = ler.nextLine();
pesquisa = pesquisa.toLowerCase();
String searchQuery = pesquisa;
List<Pair> links = searchGoogle(searchQuery);
for (Pair titulosResultados : links) {
System.out.println("Titulo: " + titulosResultados.getKey());
System.out.println("Link: " + titulosResultados.getValue());
}
}
public static List<Pair> searchGoogle(String searchQuery) throws IOException {
List<Pair> result = new ArrayList<>();
// lets get the top results counting to nearly 15
request = "https://news.google.com/search?q=" + searchQuery + "&hl=pt-PT&gl=PT&ceid=PT%3Apt-150";
org.jsoup.nodes.Document doc = Jsoup.connect(request)
.userAgent("Mozilla/5.0 (compatible; Googlebot/2.1; +http://news.google.com/bot.html)").get();
// get the required content from response . Here ( h3 a ) is the selector
// pattern for selecting all heading links
// System.out.println( "--> \n" + doc.toString() );
Elements links = doc.select(".xrnccd");
for (Element link : links) {
Elements el_a = link.select("h3");
String hrefValue = el_a.attr("a");
Elements el_divs = el_a.select("div");
String nome = "";
if(el_divs.size() > 0) {
nome = el_divs.get(0).html();
}
if (hrefValue.startsWith("/url?q=")) {
try {
String slink = extractLink(hrefValue);
if( slink != null ) {
hrefValue = URLDecoder.decode(slink, StandardCharsets.UTF_8.toString());
Pair pair = new Pair(nome, hrefValue );
result.add( pair );
}
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex.getCause());
} catch(java.lang.IndexOutOfBoundsException ie) {
ie.printStackTrace();
}
}
}
return result;
}
// extract required titulosResultados from href value
private static String extractLink(String href) {
String result = null;
Matcher m = p.matcher(href);
if (m.find()) {
result = m.group();
}
return result;
}
}
Obrigado pela ajuda
Esse é um trabalho de paciência e testes.
Quando debugar e estiver na linha de interesse, vais testando as instruções do jsoup até trazer exatamente o que de fato desejas.