Пакет html5lib оказался отличным инструментом - кроме того, что он очень терпимо относится к действительно "кривым" документам он еще и позволяет использовать различные интерфейсы для доступа к дереву документа, в том числе поддерживается и интерфейс BeautifulSoup! Вот достаточно интересный пример:
Если взять "плохой" документ следующего вида:
<div id=id"> Bad HTML
То при использовании BeautifulSoup мы получим HTMLParseError:
>>> from BeautifulSoup import BeautifulSoup
>>> f = open("test.html", "rb")
>>> soup = BeautifulSoup(f)
Traceback (most recent call last):
...
HTMLParser.HTMLParseError: malformed start tag, at line 1, column 11
В случае же html5lib документ будет успешно обработан (плюс, здесь используется интерфейс BeautifulSoup):
>>> import html5lib
>>> from html5lib import treebuilders
>>> f = open("test.html", "rb")
>>> parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
>>> soup = parser.parse(f)
>>> print soup.prettify()
<html>
<head>
</head>
<body>
<div id='id"'>
Bad HTML
</div>
</body>
</html>
Comments All comments
Comment by nadako on 12:04 AM, February 28, 2009
Интересно, спасибо за заметку. :-) Заценим.
Comment by goodguy on 12:50 AM, February 28, 2009
Кстати, стоит следить за её обновлениями. Помню на этапе от 0.10 к 0.11 очень много было хороших исправлений, благодаря которым HTMLParser становился всё устойчивей к ошибкам форматирования.
Comment by Andrey Popp on 3:31 PM, March 1, 2009
Непонятно только почему он html5lib называется, у меня какие-то ассоциации с HTML 5 возникают :)
Comment by Andrey Popp on 4:38 PM, March 1, 2009
Туплю :) Ассоциации не случайны
> ... based on the WHATWG HTML5 specification ...
Comment by bw on 5:20 PM, March 1, 2009
В "супе" 3.0.4 ошибки не возникает. Хотя давно уже перешел на html5lib, она значительно точнее разбирает невалидные документы, хотя и работает она медленнее, в некоторых случаях значительно.
..bw
Comment by Dmitry Vasiliev on 12:11 AM, March 2, 2009
Я вроде это с 3.1.0.1 пробовал. Но в любом случае в реальных документах ошибки более изощренные и у html5lib пока получается лучше с ними справляться.
Add comment