Pegar conteudo de pagina html

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.