HttpCliente / JSoup

10 respostas
S

Galera,

Estou tentando utilizar as Libs HttpCliente e JSoup para se conectar a um site.

O problema é que preciso pegar o texto de algumas tags (<span>) e o conteudo não esta sendo capturado. Segue um exemplo:

O que deveria vir:

<span id=“brand”>Fusca</span>

O que está vindo:

<span id=“brand”></span>

Acessando o site normalmente eu percebo que esses textos que quero capturar demoram um pouco mais para aparecer em tela como se tivesse buscando a info de uma fonte externa(BD).

Como posso resolver esse problema?

Existe algum método que eu possa indicar para o HttpCliente ou JSoup que só quero capturar a tela quando uma determinada Tag esteja visivel…ou quando a pagina esteja totalmente carregada?

10 Respostas

A

Você entra na página e clica com o direito em “Visualizar código fonte”, procura esse trecho, e o conteúdo dele não estiver carregado, pode ser que seja carregado via ajax.
Caso você queira pegar esse valor via ajax, utiliza uma ferramenta estilo o firebug e captura a url a requisição desse ajax, ai tu mandaria a requisição pra essa url.

S

Eu fiz essa opção de visualizar o código fonte e aparece o texto. Só que no momento que eu faço… eu acho que a pagina já está totalmente carregada por isso aparece.

Quando o Jsoup da o “connection” acho que esses dados ainda nao estao lá pro isso que ele nao pega.

No Jsoup tem como condicionar o “connection” ao carregamento total da pagina? ou…verificar se aquele elemento é diferente de null?

A

O Jsoup exibe o html por completo, ele pega tudo que vem na requisição, para mim são 2 possibilidades:
1 - Tá faltando setar algum parametro ou cookie, por isso essa informação não vem.
2 - A informação é carregada via ajax, por isso não vem na requisição.

S

Opa, mais uma vez valeu pela força.

Com relação a essas possiveis causas de erro, tenho algumas duvidas e complementos:

1- Tanto no HttpCliente como no Jsoup para capturar o conteúdo da página eu estou setando o caminho completo que quero acessar, por exemplo: www.uol.com.br/esportes

Só que acredito que o conteúdo está sendo retornado antes que os itens que preciso pegar esteja dentro das suas tags. Tem como dar uma pausa ou pedir pra retornar ao concluir 100% a página?

2-Como posso identificar se tem intervenção do Ajax? tem Solução?

Só mais alguns detalhes:

  • Ao entrar no site ele abre uma especie tela “flash” com o reloginho mandando aguardar enquanto carrega os dados, e por trás as tabelas com os campos que quero pegar vão sendo preenchidos. Acho que o HttpCliente e Jsop está pegando a página durante essa telinha de aguardo antes dos dados estarem na página.

  • Essa informação que pretendo pegar é dinâmica, cada acesso ao site o valor dela pode mudar. Mesmo mudando ela se encontra na mesma ID.

A

Sobre suas dúvidas:

1 - Pelo menos no Jsoup a tela é carraga 100% sim (imagino que esse outro também), mas isso se refere ao html da requisição inicial. Essa pausa que você fala possivelmente seja javascripts carregando os dados via ajax, isso o navegador faz porque ele executa os javascripts da página, o Jsoup não executa esses scripts, para isso você teria que criar um browser virtual, ou coisa do tipo que executasse eles.
2 - Para pegar se tem intervenção ajax, utiliza ferramentas estilo o firebug (plugin do firefox), ou o próprio chrome já tem nativamente (aperta f12) e deve ter uma aba chamada “rede” ou “network” tudo que é requisição passar por aí, desde imagens, javascripts e requisições ajax. Então você pode sair caçando se alguma dessas requisições está carregando o conteúdo dinâmico.

S

Então pelo que estou vendo tem que ter um browser ativo de todo jeito né?

Agora tenho que descobrir como fazer isso. Se tivesse uma forma de aguarda q os javascrips incluisse esses dados me daria bem.

A

Mas se os dados forem recuperados via ajax, você pode continuar usando o jsoup para pegar esses dados. É só você saber a url e os parametros passados nessa url, Quando mandar a requisição da url do ajax, você pode tratar os dados retornados.

S

Tem algum site ou material que eu possa ler para aprender a fazer esse leitura das respostas?

A

Nessas ferramentas que te falei, a do chrome e o firebug já tem todas as informações como os cookies, os parâmetros passados na reuisição. Acho que você pode começar estudando sobre como funciona os cookies, diferença de GET e POST, objetivo dos JSessionID ou PHPSessionId, ou SessionsId similares (que são os cookies que identificam a sessão autal). Na documentação do jsoup tem muita coisa boa sobre como passar cookies, como passar parêmetros nas urls.

S

Ayslan,

Até achei os métodos que trabalham com cookies, mas não to sabendo implementar. Segue abaixo o que achei:

public Connection cookies(Map<String,String> cookies)

Até agora fiz como no exemplo abaixo:

Map<String, String> c = new HashMap<String, String>();
c.put(“nome”, “valor”);

Document doc = Jsoup.connect(“http://www.google.com”).cookies©.get();

Está faltando alguma coisa?

Meu retorno continua sem em branco.

Criado 31 de julho de 2013
Ultima resposta 1 de ago. de 2013
Respostas 10
Participantes 2