Pegar conteudo de pagina html

9 respostas
F

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…

9 Respostas

R

Por que você não usa algum parser XML para fazer a busca no texto que capturar?
Procure por DOM ou SAX.

F

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 ?

F

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 ?

M

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/

F

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.

M

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/

F

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.

M

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/

F

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.

Criado 18 de maio de 2010
Ultima resposta 24 de mai. de 2010
Respostas 9
Participantes 3