2009-10-13 4 views
2

В настоящее время у меня есть код Ruby, используемый для очистки некоторых веб-сайтов. Я использовал Ruby, потому что в то время, когда я использовал Ruby on Rails для сайта, это имело смысл.Какую чистую библиотеку Python я должен использовать для очистки веб-сайта?

Теперь я пытаюсь перенести это на Google App Engine и продолжаю застревать.

Я портировал Python Mechanize для работы с Google App Engine, но он не поддерживает проверку DOM с помощью XPATH.

Я пробовал встроенный ElementTree, но он задохнулся от первого HTML-блоба, который я дал ему, когда он столкнулся с «& mdash».

Должен ли я пытаться взломать ElementTree там, или я пытаюсь использовать что-то еще?

спасибо, Марк

+2

Duplicate из всех этих: http://stackoverflow.com/search?q=%5Bpython%5D+html+parse –

+0

Мне, возможно, придется пойти с помощью scrapy, могу ли я использовать XPath с красивым супом? – MStodd

+0

На самом деле мне, возможно, придется идти ни с чем, так как я не уверен, что красивый суп работает с xpath, и похоже, что у scrapy есть бинарная зависимость. – MStodd

ответ

11

Beautiful Soup.

+0

По какой-то причине я думал, что это чистый питон, но похоже, что это так. Я проверю это. – MStodd

+2

Во-вторых, что. Красивый суп невероятен. –

+0

+1 для прекрасного супа. Скребок - это вся его цель. – steveha

6

LXML - 100x лучше, чем ElementTree

+3

lxml является оберткой для библиотеки C, поэтому он не может работать на appengine. –

+0

Он также будет баровым так же сильно на плохо сформированном HTML. – jcdyer

+5

jcd - не верно. lxml включает в себя несколько опций для синтаксического анализа HTML, в том числе с использованием BeautifulSoup в качестве бэкэнда парсера - http://codespeak.net/lxml/elementsoup.html –

4

Там также scrapy, может быть больше по вашей линии.

+0

+1 для скрининга. Работает очень хорошо. – nosklo

+0

ему нужен lxml или libxml2 tough – sleeplessnerd

0

Есть целый ряд примеров веб-страниц, написанных с использованием скребков pyparsing, такие как this one (выписок все URL ссылки из yahoo.com) и this one (для извлечения адреса сервера NTP NIST). Обязательно используйте вспомогательный метод pyparsing makeHTMLTags вместо простого кодирования "<" + Literal(tagname) + ">" - makeHTMLTags создает очень надежный парсер с возможностью размещения дополнительных пространств, несоответствий верхнего и нижнего регистра, неожиданных атрибутов, значений атрибутов с различными стилями цитирования и т. Д. Pyparsing также даст вам больше контроля над специальными проблемами синтаксиса, такими как пользовательские объекты. Также это чистый Python, свободно лицензированный и небольшой размер (модуль с одним источником), поэтому легко вставить приложение GAE прямо в ваш другой код приложения.

0

BeautifulSoup это хорошо, но его API неловко. Попробуйте , который предоставляет интерфейс ElementTree для BeautifulSoup.