2009-10-13 13 views
2

J'ai actuellement du code Ruby utilisé pour gratter certains sites Web. J'utilisais Ruby parce qu'à l'époque j'utilisais Ruby on Rails pour un site, et ça avait du sens.Quelle pure bibliothèque Python devrais-je utiliser pour gratter un site Web?

Maintenant, j'essaie de transférer ceci vers Google App Engine et de rester bloqué.

J'ai porté Python Mechanize pour fonctionner avec Google App Engine, mais il ne prend pas en charge l'inspection DOM avec XPATH.

J'ai essayé le ElementTree intégré, mais il s'est étouffé sur le premier blob HTML que je lui ai donné lorsqu'il est tombé sur '& mdash'. Est-ce que je continue à essayer de pirater ElementTree, ou est-ce que j'essaie d'utiliser autre chose?

merci, Mark

+2

Dupliquer de tous ceux-ci: http://stackoverflow.com/search?q=%5Bpython%5D+html+parse –

+0

Je pourrais avoir à aller avec scrapy, puis-je utiliser XPath avec une belle soupe? – MStodd

+0

En fait, je pourrais devoir aller avec aucun depuis que je ne suis pas sûr que la belle soupe fonctionne avec xpath, et il semble que scrapy a une dépendance binaire. – MStodd

Répondre

11

Belle soupe.

+0

Pour une raison quelconque, je pensais que c'était pur python, mais il semble que ce soit. Je vérifierai. – MStodd

+2

Deuxièmement. Belle soupe est incroyable. –

+0

+1 pour une belle soupe. Le raclage est tout son but. – steveha

6

lxml - 100x mieux que elementtree

+3

lxml est un wrapper pour une bibliothèque C, donc il ne peut pas fonctionner sur appengine. –

+0

Cela va aussi durer autant sur du HTML mal formé. – jcdyer

+5

jcd - pas vrai. lxml inclut plusieurs options d'analyse HTML, y compris l'utilisation de BeautifulSoup comme moteur d'analyse - http://codespeak.net/lxml/elementsoup.html –

0

Il y a un certain nombre d'exemples de grattoirs page web écrite en utilisant pyparsing, comme this one (extraits tous les liens URL de yahoo.com) et this one (pour extraire les adresses de serveur NTP NIST). Assurez-vous d'utiliser la méthode help pyparsing makeHTMLTags, au lieu de simplement coder manuellement "<" + Literal(tagname) + ">" - makeHTMLTags crée un analyseur très robuste, avec des espaces supplémentaires, des incohérences majuscules/minuscules, des attributs inattendus, des valeurs d'attribut avec différents styles de citation, etc. Pyparsing vous donnera également plus de contrôle sur les problèmes de syntaxe spéciaux, tels que les entités personnalisées. En outre, il s'agit de Python pur, sous licence libérale et de faible encombrement (un seul module source). Il est donc facile de le déposer directement dans votre application GAE avec votre autre code d'application.

0

BeautifulSoup est bon, mais son API est difficile. Essayez , qui fournit une interface ElementTree à BeautifulSoup.