В итоге, lxml
позиционируется как молниеносный html и xml-анализатор производственного качества, который, кстати, также включает в себя модуль soupparser
для использования функциональности BeautifulSoup. BeautifulSoup
- это проект для одного человека, предназначенный для экономии времени на быстрое извлечение данных из плохо сформированных HTML или XML.
lxml документация говорит, что оба синтаксических анализатора имеют свои преимущества и недостатки. По этой причине lxml
предоставляет soupparser
, чтобы вы могли переключаться назад и вперед. Цитирование,
BeautifulSoup использует другой подход к анализу. Это не настоящий HTML
синтаксический анализатор, но использует регулярные выражения для погружения через тег супа. это
следовательно, в некоторых случаях более прощающие, а в других - менее хорошие. это
не редкость, что lxml / libxml2 лучше разбирает и исправляет сломанный HTML,
но BeautifulSoup имеет превосходную поддержку для обнаружения кодирования. It
очень многое зависит от того, какой парсер работает лучше.
В конце они говорят,
Недостатком использования этого парсера является то, что он намного медленнее , чем
HTML-анализатор lxml. Так что, если производительность имеет значение, вы можете захотеть
рассмотреть возможность использования soupparser только как запасной вариант для определенных случаев.
Если я правильно их понимаю, это означает, что анализатор супа является более надежным - он может справиться с «супом» из искаженных тегов с помощью регулярных выражений - тогда как lxml
более прост и просто разбирает вещи и строит дерево, как вы ожидаете. Я предполагаю, что это также относится к BeautifulSoup
, а не только к soupparser
для lxml
.
Они также показывают, как извлечь выгоду из обнаружения кодировки BeautifulSoup
, в то же время быстро анализируя с lxml
:
>>> from BeautifulSoup import UnicodeDammit
>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode
>>> root = lxml.html.fromstring(decode_html(tag_soup))
(Тот же источник: http://lxml.de/elementsoup.html).
По словам создателя BeautifulSoup
,
Вот и все! Повеселись! Я написал «Красивый суп», чтобы сэкономить время.
Как только вы привыкнете к этому, вы сможете извлекать данные из
плохо спроектированные сайты всего за несколько минут. Отправьте мне письмо, если вы
есть какие-либо комментарии, столкнуться с проблемами или хотите, чтобы я знал о вашем
проект, который использует Beautiful Soup.
--Leonard
Цитируется по документации Beautiful Soup .
Надеюсь, теперь все ясно. Суп - это замечательный проект для одного человека, который поможет вам сэкономить время на извлечении данных из плохо спроектированных веб-сайтов. Цель состоит в том, чтобы сэкономить ваше время прямо сейчас, чтобы выполнить работу, не обязательно экономить ваше время в долгосрочной перспективе, и, безусловно, не оптимизировать производительность вашего программного обеспечения.
Также с веб-сайта lxml ,
lxml был загружен из индекса пакетов Python более двух
миллион раз, а также доступен непосредственно во многих пакет
распределения, например для Linux или MacOS-X.
А с Почему lxml? ,
Библиотеки C libxml2 и libxslt имеют огромные преимущества: ...
Соответствует стандартам ... Полнофункциональный ... быстрый. быстро! БЫСТРО! ... lxml
новая привязка Python для libxml2 и libxslt ...