Я собираю контент из нескольких внешних источников и обнаруживаю, что некоторые из них содержат ошибки в его HTML/DOM. Хорошим примером может быть отсутствие HTML-тегов, закрывающих теги, или неправильные атрибуты тегов. Есть ли способ очистить ошибки в Python изначально или от любых сторонних модулей, которые я мог установить?Очистка HTML в Python
ответ
Я предлагаю Beautifulsoup. У этого есть замечательный парсер, который может иметь дело с искаженными тегами довольно изящно. После того, как вы прочитали все дерево, вы можете просто вывести результат.
from BeautifulSoup import BeautifulSoup
tree = BeautifulSoup(bad_html)
good_html = tree.prettify()
Я использовал это много раз, и он творит чудеса. Если вы просто извлекаете данные из bad-html, тогда BeautifulSoup действительно светит, когда дело доходит до вытаскивания данных.
Будьте осторожны с производительностью, BeautifulSoup очень экспансивный. – Tarantula
@Tarantula. Я согласен, BeautifulSoup довольно медленный, но это единственное, что я когда-либо видел, который может анализировать некоторые из этих сумасшедших искаженных таблиц на основе HTML. – JudoWill
Это правда, JudoWill. – Tarantula
Есть привязки python для HTML Tidy Library Project, но автоматическая очистка сломанного HTML - это жесткая гайка для взлома. Это не так сильно отличается от попыток автоматического исправления исходного кода - возможностей слишком много. Вам все равно нужно будет просмотреть результаты и почти наверняка сделать дальнейшие исправления вручную.
Я использую lxml для преобразования HTML в правильной (хорошо сформированной) XML:
from lxml import etree
tree = etree.HTML(input_text.replace('\r', ''))
output_text = '\n'.join([ etree.tostring(stree, pretty_print=True, method="xml")
for stree in tree ])
... и делать много удаления из 'опасных элементов' в середине ....
Это можно сделать с помощью функции tidy_document в модуле tidylib.
import tidylib
html = '<html>...</html>'
inputEncoding = 'utf8'
options = {
str("output-xhtml"): True, #"output-xml" : True
str("quiet"): True,
str("show-errors"): 0,
str("force-output"): True,
str("numeric-entities"): True,
str("show-warnings"): False,
str("input-encoding"): inputEncoding,
str("output-encoding"): "utf8",
str("indent"): False,
str("tidy-mark"): False,
str("wrap"): 0
};
document, errors = tidylib.tidy_document(html, options=options)
Вот пример очистки HTML с помощью lxml.html.clean.Cleaner модуля:
import sys
from lxml.html.clean import Cleaner
def sanitize(dirty_html):
cleaner = Cleaner(page_structure=True,
meta=True,
embedded=True,
links=True,
style=True,
processing_instructions=True,
inline_style=True,
scripts=True,
javascript=True,
comments=True,
frames=True,
forms=True,
annoying_tags=True,
remove_unknown_tags=True,
safe_attrs_only=True,
safe_attrs=frozenset(['src','color', 'href', 'title', 'class', 'name', 'id']),
remove_tags=('span', 'font', 'div')
)
return cleaner.clean_html(dirty_html)
if __name__ == '__main__':
with open(sys.argv[1]) as fin:
print(sanitize(fin.read()))
Отъезд docs для полного списка опций, которые можно передать в очистителем.
- 1. python [lxml] - очистка html-тегов
- 2. Python regex - очистка markdown html
- 3. Очистка HTML-кода HTML
- 4. Очистка и удаление строк/HTML-Python
- 5. Очистка HTML в iOS
- 6. Очистка памяти в python
- 7. Очистка текста python
- 8. TinyMCE очистка HTML в Umbraco
- 9. Очистка кеша формы в html
- 10. Очистка данных HTML в R
- 11. Очистка HTML от textarea
- 12. Очистка внутреннего выхода HTML
- 13. Очистка атрибутов HTML-тегов
- 14. Perl HTML-очистка
- 15. python pexpect очистка или очистка строки
- 16. Очистка редактора uikit html
- 17. Очистка разбитого XML в Python
- 18. Очистка веб-страниц в python
- 19. Очистка установки Python
- 20. Адаптивная очистка сетки - Python
- 21. Python - Очистка веб-страниц Проблема
- 22. Очистка сломанного URL-адреса в python
- 23. Очистка HTML с помощью JavaScript
- 24. Python: Очистка веб-сайтов, не возвращающих никаких HTML
- 25. Очистка значений ячеек внутри HTML
- 26. Очистка HTML-кода, созданного JQueryUI?
- 27. Очистка содержимого внутри html-тегов
- 28. Sanitize/очистка HTML API Быстродействие
- 29. Очистка поля формы HTML в отпуске
- 30. Очистка HTML-разрывов append в jquery
Были ли какие-либо из этих ответов, что вы искали? Если вам нужна дополнительная информация, мы, безусловно, можем помочь? – JudoWill
@JudoWill: Да, я смог настроить BeautifulSoup и Tidy. К сожалению, у них не было много проблем, которые у меня были. Я закончил создание своей собственной функции, чтобы пройти цикл через DOM и исправить проблемы. Спасибо за помощь! – Joel
Не могли бы вы разместить свою функцию в качестве ответа. Это проблема, с которой у меня много времени, и я всегда ищу новые решения. :) – JudoWill