Estou tentando pegar o conteudo de uma pagina de pesquisa do google usando o HttpClient.
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("http://www.google.com.br/#q=texo+aqui");
client.executeMethod(method);
byte[] x = method.getResponseBody();
System.out.println(new String(x));
só que ao invez de aparecer o texto da pagina pra que eu possa manipula-lo aparece o codigo fonte com uns javascripts. Como posso fazer pra pegar o texto da pagina inteira ? ou entao o conteudo das tags html,
etc…
Por que você não usa algum parser XML para fazer a busca no texto que capturar?
Procure por DOM ou SAX.
Roger75,
o problema é que eu nao tenho esse texto. Aquele codigo ali nao esta retornando a pagina html inteira como eu gostaria, ele só retorna o javascript que monta a pagina ( acho eu ).
como fazer pra pegar o texto da pagina ?
Ninguem sabe como fazer ? ja tentei de varias formas mas nao consigo pegar o texto da pesquisa do google, só retorna o codigo fonte de um javascript. Em delphi se eu uso um TWebBrowser eu consigo pegar a pagina com todas as tags html etc… como posso fazer isso usando java ?
Felipe, você precisa usar a Google Search API ao invés de acessar o endereço desta forma. Aí, também precisará de uma biblioteca JSON que tratará o retorno da pesquisa. Por exemplo, copie e cole este link no browser. http://ajax.googleapis.com/ajax/services/search/web?start=0&rsz=large&v=1.0&q=marlon
Você está pesquisando por “Marlon” no Google e a resposta vem no formato JSON. Já existe uma biblioteca que trata este formato, basta buscar no Google por JSON+JAVA.
Grande abraço!
http://marlon.silvacarvalho.net/
Ae marlon,
eu tentei usar essa api, mas o problema é que ela retorna só os 56 primeiros resultados, ou algo parecido, e eu queria ter o maximo possivel de resultados. Teria que conseguir pegar o texto da pagina mesmo, voce nao sabe como fazer isso em java ? em delphi é tao facil…
valeu pela ajuda.
Felipe, a API permite você parametrizar tudo, inclusive a quantidade de registros e a página que você quer ver. Não sei os detalhes, mas você pode fazer uma busca por Google Search API que você vai encontrar muita coisa sobre o assunto. Só observe que usando a API você terá o resultado da consulta, mas não o layout de exibição da página do Google. Se você na verdade quer apenas exibir uma consulta no Google em um “Browser Interno”, tipo um HTML View, aí é melhor ver as opções e componentes disponíveis no Swing/AWT e fazer a consulta como você estava imaginando.
Grande abraço!
http://marlon.silvacarvalho.net/
Marlon,
da para parametrizar porem ele limita o numero, olha só:
se eu usar start=56 ele faz a pesquisa.
http://ajax.googleapis.com/ajax/services/search/web?start=56&rsz=large&v=1.0&q=marlon
mas seu botar start=57 ja da error
http://ajax.googleapis.com/ajax/services/search/web?start=57&rsz=large&v=1.0&q=marlon
{“responseData”: null, “responseDetails”: “out of range start”, “responseStatus”: 400}
tem que ter um jeito de pegar o html da pagina, usando um browser talvez, nao sei, eu tentei de varias formas e nao consegui.
Não conheço estas limitações. Porém, acredito que não dá para pegar o conteúdo HTML, pois o Google usa sua Google AJAX Search API, que é em Javascript. Ela já renderiza todo o resultado na tela apenas usando javascript. Ou seja, você não tem acesso ao HTML diretamente. Tenta ver na documentação do Google sobre o assunto. Normalmente eles documentam muito bem suas APIs. A única coisa que tenho “quase certeza” é que você precisa usar essa API deles, senão nada feito.
Só vendo se outro colega aqui do fórum tem alguma dica.
Grande abraço!
http://marlon.silvacarvalho.net/
Entao, eu acho que tem que fazer sem usar a API mesmo, em delphi eu consegui, fiz assim:
query := ‘http://www.google.com.br/search?q=PESQUISA AQUI&num=100&hl=pt-BR’;
WebBrowser1.navigate( query );
depois no onDocumentComplete do borwser eu faço:
forms:=forms.tags(‘a’) as IHTMLElementCollection;
e vou pegando link por link.
for Idx := 0 to forms.length - 1 do
begin
form:=forms.item(idx,0) as IHTMLElement;
memo1.lines.add(form.getAttribute('href', 0) );
end;
é uma gambiarra eu sei, mas funciona, queria fazer uma coisa parecida em java, mas nao sei como.