¿Qué biblioteca de Python pura debo usar para raspar un sitio web?

Actualmente tengo un código Ruby usado para raspar algunos sitios web. Estaba usando Ruby porque en ese momento estaba usando Ruby on Rails para un sitio, y tenía sentido.

Ahora estoy tratando de trasladar esto a Google App Engine, y seguir atascado.

He portado Python Mechanize para trabajar con Google App Engine, pero no es compatible con la inspección de DOM con XPATH.

Probé el ElementTree incorporado, pero se ahogó con el primer blob HTML que le di cuando se topó con ‘& mdash’.

¿Sigo intentando piratear ElementTree allí o trato de usar otra cosa?

gracias mark

Sopa Hermosa

lxml – 100x mejor que elementtree

También hay chatarra , podría ser más su callejón.

Hay una serie de ejemplos de raspadores de páginas web que se escriben con el uso de pyparsing , como este (extrae todos los enlaces de URL de yahoo.com) y este (para extraer las direcciones del servidor NIST NTP). Asegúrese de usar el método de ayuda pyparsing makeHTMLTags, en lugar de simplemente codificar a mano "<" + Literal(tagname) + ">" – makeHTMLTags crea un analizador muy robusto, con espacio para espacios adicionales, inconsistencias en mayúsculas / minúsculas, atributos inesperados, atribuye valores con varios estilos de cotización, y así sucesivamente. Pyparsing también le dará más control sobre los problemas de syntax especiales, como las entidades personalizadas. También es Python puro, con licencia generosa y una huella pequeña (un único módulo fuente), por lo que es fácil colocarlo en su aplicación GAE directamente con su otro código de aplicación.

BeautifulSoup es bueno, pero su API es incómodo. Pruebe ElementSoup , que proporciona una interfaz de ElementTree a BeautifulSoup.