2013-01-11 2 views
2

J'écris une araignée avec scrapy, cependant, je rencontre un site Web qui a rendu avec js, ainsi l'urllib2.open_url ne fonctionne pas. J'ai trouvé que je pouvais ouvrir le navigateur avec webbrowser.open_new (url), cependant, je n'ai pas trouvé comment obtenir le code de la page src avec webbrowser. Y at-il un moyen que je pourrais utiliser pour faire cela avec webbrowser, ou y at-il d'autres solutions sans webbrowser pour traiter les sites js?Comment obtenir le code source de webbrowser avec python

+0

Un webbrowser ne stocke pas le balisage d'une page, il contient un DOM. – Bergi

Répondre

0

Si vous avez besoin de traiter JavaScript, vous devez implémenter un moteur JavaScript. Cela rend votre araignée beaucoup plus complexe. Principalement parce que JavaScript modifie presque toujours le DOM en fonction du temps ou d'une action prise par l'utilisateur. Cela rend extrêmement difficile de traiter JS dans un robot d'exploration. Si vous avez vraiment besoin de traiter JavaScript dans votre araignée, vous pouvez jeter un oeil à moteur JavaScript par Mozilla: https://developer.mozilla.org/en/docs/SpiderMonkey

5

Vous pouvez utiliser grattoir avec le moteur Webkit disponible là-bas.

L'un d'eux est dryscrape.

Exemple:

import dryscrape 

search_term = 'dryscrape' 

# set up a web scraping session 
sess = dryscrape.Session(base_url = 'http://google.com') 

# we don't need images 
sess.set_attribute('auto_load_images', False) 

# visit homepage and search for a term 
sess.visit('/') 
q = sess.at_xpath('//*[@name="q"]') 
q.set(search_term) 
q.form().submit() 

# extract all links 
for link in sess.xpath('//a[@href]'): 
    print link['href'] 

# save a screenshot of the web page 
sess.render('google.png') 
print "Screenshot written to 'google.png'" 

Voir plus d'infos sur:

https://github.com/niklasb/dryscrape
https://dryscrape.readthedocs.org/en/latest/index.html

+0

Il y a aussi ghost (http://jeanphix.me/Ghost.py/) une autre implémentation webkit python headless. Je n'ai pas essayé les deux, donc je ne peux pas dire lequel est le meilleur. –

+0

Raslan: merci pour votre suggestion, je travaille sur windows et quand j'ai essayé d'installer 'dryscrape', ça dit que l'installation est réussie, mais ça échoue quand j'essaye d'importer drayscrape en cours d'exécution, en disant 'from cssselect import GenericTranslator ImportError: aucun module nommé cssselect '. – user806135

+0

Le guide d'installation de dryscrape contient les informations suivantes: pip install -r requirements.txt où le fichier requirements.txt contient la liste des packages à installer. L'un d'eux est cssselect.Suivez le guide d'installation –

1

Si vous avez besoin d'un moteur js complet, il y a un certain nombre de façons dont vous pouvez conduire webkit de Python . Jusqu'à récemment, ce genre de choses a été fait avec Selenium. Selenium conduit un navigateur entier. Plus récemment, il existe des moyens plus récents et plus simples d'exécuter un moteur Webkit (qui inclut le moteur JavaScript javascript) à partir de Python. Voir cette question SO: Headless Browser for Python (Javascript support REQUIRED!)

Il référence ce blog comme un exemple Scraping Javascript Webpages with Webkit. Il semble faire plus ou moins juste ce dont vous avez besoin.

1

J'essaie de trouver une réponse au même problème depuis quelques jours maintenant. Je suggère que vous essayez QT framework avec WebKit. Il existe deux liaisons python. L'un est PyQt et l'autre est PySide. Vous pouvez les utiliser directement si vous voulez créer quelque chose de plus complexe ou si vous voulez avoir 100% de contrôle sur votre code.

Pour des choses triviales comme l'exécution de JavaScript dans un environnement de navigateur, vous pouvez utiliser Ghost.py. Il a some sort of documentation et quelques problèmes lors de l'utilisation de la ligne de commande, mais sinon c'est génial.

Questions connexes