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.
S
socialclub
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
ayslanms
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
socialclub
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
ayslanms
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
socialclub
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
ayslanms
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
socialclub
Tem algum site ou material que eu possa ler para aprender a fazer esse leitura das respostas?
A
ayslanms
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
socialclub
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”);