web-dev-qa-db-fra.com

Lecture de pages Web générées dynamiquement à l'aide de python

J'essaie de gratter un site Web en utilisant du python et une belle soupe. J'ai rencontré que dans certains sites, les liens d'image bien que vus sur le navigateur ne peuvent pas être vus dans le code source. Cependant, en utilisant Chrome Inspect ou Fiddler, nous pouvons voir les codes correspondants. Ce que je vois dans le code source est:

<div id="cntnt"></div>

Mais sur Chrome Inspect, je peux voir tout un tas de code HTML\CSS généré dans cette classe div. Existe-t-il un moyen de charger le contenu généré également dans python? J'utilise l'urllib normal en python et je peux obtenir le source mais sans la partie générée.

Je ne suis pas un développeur Web et je ne peux donc pas exprimer le comportement de manière plus satisfaisante. N'hésitez pas à préciser si ma question semble vague!

20
Ajay Nair

Vous avez besoin de JavaScript Engine pour analyser et exécuter le code JavaScript dans la page . Il y a beaucoup de navigateurs sans tête qui peuvent vous aider

http://code.google.com/p/spynner/

http://phantomjs.org/

http://zombie.labnotes.org/

http://github.com/ryanpetrello/python-zombie

http://jeanphix.me/Ghost.py/

http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/

14
Andrey Nikishaev

Le contenu du site Web peut être généré après le chargement via javascript. Pour obtenir le script généré via python, reportez-vous à la section this answer

5
ppsreejith

ESSAYEZ-LE EN PREMIER!

Peut-être que les données techniques pourraient être dans le javascript lui-même et toute cette activité de moteur de javascript est nécessaire. (Quelques liens géniaux ici!)

Mais d’expérience, ma première hypothèse est que le JS récupère les données via une requête ajax. Si votre programme peut simuler cela, vous obtiendrez probablement tout ce dont vous avez besoin sans aucune analyse/exécution fastidieuse!

Il faudra cependant un peu de travail de détective. Je suggère d'activer votre enregistreur de trafic réseau (tel que la "barre d'outils de développeur Web" dans Firefox), puis de vous rendre sur le site. Concentrez votre attention sur toutes les requêtes XmlHTTPRequests. Les données dont vous avez besoin doivent figurer quelque part dans l'une de ces réponses, probablement au milieu d'un texte JSON.

Maintenant, voyez si vous pouvez recréer cette demande et récupérer les données directement. (REMARQUE: vous devrez peut-être définir l'agent utilisateur de votre demande pour que le serveur pense que vous êtes un "vrai" navigateur Web.)

0

Un grattoir normal obtient uniquement le document HTML. Pour obtenir le contenu généré par la logique JavaScript, vous avez plutôt besoin d’un navigateur Headless pouvant également générer le DOM, charger et exécuter les scripts comme un navigateur classique. L'article de Wikipedia et quelques autres pages sur le Net ont des listes de ceux-ci et de leurs capacités.

Gardez à l'esprit lors du choix que certains produits auparavant importants de ceux-ci sont maintenant abandonnés.

0
ivan_pozdeev