HttpCliente / JSoup

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?

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.

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?

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.

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.

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.

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.

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.

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

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.

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.