2011-08-08 6 views
0

J'essaye de gratter des données d'un site Web qui utilise javascript pour charger une grande partie de leur contenu. En ce moment j'utilise jSoup pour analyser les pages html, mais depuis une grande partie du contenu est chargé en utilisant javascript, je n'ai pas été en mesure d'analyser les données que je veux.Scraping Data. Enregistrer le fichier?

Comment puis-je obtenir ce contenu javascript? Devrais-je d'abord enregistrer la page puis charger et analyser en utilisant jSoup? Si oui, que dois-je utiliser pour charger le contenu javascript avant de sauvegarder? Y a-t-il une API que vous recommanderiez qui pourrait produire du HTML?

Actuellement, il utilise java.

Répondre

1

Vous pourriez être intéressé à vérifier pjscrape (avertissement: ceci est mon projet). Il s'agit d'un outil de ligne de commande utilisant PhantomJS pour autoriser le scrapage en utilisant JavaScript et jQuery dans un contexte de navigateur complet - entre autres, vous pouvez définir une fonction "prête" pour la page et attendre jusqu'à la fonction (qui pourrait vérifier l'existence de certains éléments DOM, etc) renvoie true. L'autre option, en fonction de la page, consiste à utiliser une console comme Firebug pour déterminer quelles données sont chargées (c'est-à-dire quelles URL sont récupérées par les appels AJAX sur la page), et les récupérer directement depuis ces URL.

0

Si les données sont générées avec JavaScript alors les données sont dans la page téléchargée. Mieux vaut les analyser directement à la volée comme vous le faites avec l'analyse HTML ou Text. Si vous ne pouvez pas isoler des jetons avec l'API jSoup, il suffit de les analyser à l'aide des options Chaîne directe, en tant que texte brut.

0

J'ai essayé d'utiliser htmlUnit mais je l'ai trouvé très lent. J'ai fini par utiliser la fonction de ligne de commande curl dans java qui a fonctionné pour mes fins.

String command = "curl "+url; 
Process p = Runtime.getRuntime().exec(command); 

BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
while ((s = stdInput.readLine()) != null) { 
    html = html+s+"\n"; 
} 

return html;