2010-03-07 4 views
10

В настоящее время я пытаюсь очистить веб-сайт с довольно плохо отформатированным HTML (часто отсутствующие закрывающие теги, без использования классов или идентификаторов, поэтому невероятно сложно перейти к нужному элементу и т. Д.).). Я использую BeautifulSoup с некоторым успехом, но все время от времени (хотя и довольно редко) я сталкиваюсь с страницей, где BeautifulSoup создает дерево HTML немного иначе, чем (например) Firefox или Webkit. Хотя это понятно, так как форматирование HTML оставляет это двусмысленным, если бы я смог получить то же дерево разбора, что и Firefox или Webkit, я мог бы легче разбирать вещи. Проблемы обычно похожи на сайт, который дважды открывает тег <b>, и когда BeautifulSoup видит второй тег <b>, он сразу же закрывает первый, в то время как Firefox и Webkit гнездятся в тегах <b>.Веб-скребок с Python

Есть ли библиотека стирания веб-страниц для Python (или даже любого другого языка (я отчаянно)), который может воспроизводить дерево синтаксического разбора, созданное Firefox или WebKit (или, по крайней мере, ближе к BeautifulSoup в случаях двусмысленности) ,

+0

Почему бы не использовать сам WebKit? Webkit - с открытым исходным кодом. Да, для того, чтобы привыкнуть, потребуется немного времени. –

+1

Вы сказали группе beautifulsoup? Вероятно, они заинтересованы в таких трюках, как ваши http://groups.google.com/group/beautifulsoup –

+0

Сколько раз задавались вопросы ... –

ответ

10

Используйте BeautifulSoup как дерево строителя для html5lib:

from html5lib import HTMLParser, treebuilders 

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup")) 

text = "a<b>b<b>c" 
soup = parser.parse(text) 
print soup.prettify() 

Выход:

<html> 
<head> 
</head> 
<body> 
    a 
    <b> 
    b 
    <b> 
    c 
    </b> 
    </b> 
</body> 
</html> 
1

Ну, WebKit является открытым исходным кодом, так что вы можете использовать свой собственный парсер (в компоненте WebCore), если любой язык является приемлемым

2

Вы можете управлять браузером по вашему выбору с SeleniumRC.

3

вы пробовали scrapy?

Scrapy является быстрым высокоуровневым экран выскабливания и веба ползать рамки, используется для сканирования веб-сайтов и извлекать структурированных данные из своих страниц. Он может использоваться для широкого спектра целей: , от добычи данных до мониторинга и автоматических испытаний.

0

Из документации кажется, что ICantBelieveItsBeautifulSoup анализатор, что вы хотите:

ICantBelieveItsBeautifulSoup также подкласс BeautifulSoup. Он имеет HTML эвристики, которые более точно соответствуют стандарту HTML, но игнорируют, как HTML используется в реальном мире. Для Например, она действует HTML гнездиться <B> метки, но в реальном мире вложенный <B> тег почти всегда означает, что автор забыл закрыть первый <B> тега. Если вы столкнулись с тем, кто действительно гнездится <B> теги, тогда вы можете использовать ICantBelieveItsBeautifulSoup.

0

это выглядит хорошо для меня, я использую это сам: ссылка [http://code.google.com/p/webscraping/]

1

вы можете использовать LXML анализатор, в BeautifulSoup, и вы используете xpath для поиска данных на неформатированной странице html, вы можете скопировать xpath при проверке элемента с помощью firebug.

Вы можете проверить этот учебник: http://www.youtube.com/watch?v=PgWfF-Ut0zM

Смежные вопросы