Я ищу модуль HTML Parser для Python, который может помочь мне получить теги в виде списков / словарей / объектов Python.
Если у меня есть документ формы:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
тогда он должен дать мне способ доступа к вложенным тегам через имя или идентификатор тега HTML, чтобы я мог попросить его получить содержимое / текст в div
теге, class='container'
содержащийся внутри body
тега, или что-то подобное.
Если бы вы использовали функцию Firefox «Изучить элемент» (просмотр HTML), вы бы знали, что она дает вам все теги в виде вложенных элементов, таких как дерево.
Я бы предпочел встроенный модуль, но это может потребовать слишком много.
Я просмотрел много вопросов о переполнении стека и несколько блогов в Интернете, и большинство из них предлагают BeautifulSoup, lxml или HTMLParser, но лишь немногие из них подробно описывают функциональность и просто заканчиваются дискуссией о том, какой из них быстрее / эффективнее.
источник
Ответы:
Полагаю, вам не нужны описания производительности - просто прочитайте, как работает BeautifulSoup. Посмотрите на его официальную документацию .
источник
from bs4 import BeautifulSoup
lxml
библиотеку (см. Ответ ниже). Сcssselect
ним это тоже полезно, а производительность часто в 10-100 раз выше, чем у других доступных библиотек.class
атрибут является особенным:BeautifulSoup(html).find('div', 'container').text
Я предполагаю , что вы ищете, pyquery :
Пример того, что вы хотите, может быть таким:
И он использует те же селекторы, что и элемент проверки Firefox или Chrome. Например:
Селектор проверяемого элемента - «div # mw-head.noprint». Так что в pyquery вам просто нужно передать этот селектор:
источник
Здесь вы можете узнать больше о различных HTML-парсерах в Python и их производительности. Хотя статья немного устарела, она все же дает вам хороший обзор.
Производительность анализатора Python HTML
Я бы порекомендовал BeautifulSoup, даже если он не встроен. Просто потому, что с ним легко работать для такого рода задач. Например:
источник
from bs4 import BeautifulSoup
По сравнению с другими библиотеками синтаксического анализатора
lxml
чрезвычайно быстро:И с
cssselect
этим довольно легко использовать для очистки страниц HTML:lxml.html Документация
источник
import requests
, сохраните буфер в файл: stackoverflow.com/a/14114741/1518921 (или urllib), после загрузки сохраненного файла с помощью синтаксического анализа,doc = parse('localfile.html').getroot()
1.7
секунду, но вместо этого применяя lxml , оно увеличилось почти в несколько*100
раз БЫСТРЕЕ! Если забота о производительности, lxml - лучший вариантЯ рекомендую lxml для разбора HTML. Смотрите "Разбор HTML" (на сайте lxml).
По моему опыту, Beautiful Soup портит сложный HTML. Я считаю, что это потому, что Beautiful Soup - это не парсер, а очень хороший анализатор строк.
источник
Я рекомендую использовать библиотеку justext :
https://github.com/miso-belica/jusText
Использование: Python2:
python3:
источник
Я бы использовал EHP
https://github.com/iogf/ehp
Вот:
Вывод:
источник