Проверять, является ли строка допустимым HTML в python? - PullRequest
0 голосов
/ 04 июля 2019

Какой метод лучше всего использовать, чтобы узнать, что строка содержит действительный HTML-код с правильным синтаксисом?

Я попытался заглянуть в HTMLParser из модуля html.parser, и если он не выдает никакой ошибки во время синтаксического анализа, я заключаю, что строка является допустимым HTML.Однако это мне не помогло, поскольку он даже анализировал недопустимые строки без каких-либо ошибок.

from html.parser import HTMLParser

parser = HTMLParser()

parser.feed('<h1> hi')
parser.close()

Я ожидал, что это вызовет какое-то исключение или ошибку, поскольку закрывающий тег отсутствует, но это не так.

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Традиционный HTMLParser из html.parser не проверяет ошибки из тегов HTML, он только "маркирует" каждое содержимое строки.

Возможно, вы захотите взглянуть на py_w3c .Не похоже, чтобы кто-то присматривал за этим модулем, но он эффективен в выявлении ошибок:

from py_w3c.validators.html.validator import HTMLValidator


val = HTMLValidator()
val.validate_fragment("<h1> hey yo")

for error in val.errors:
    print(error.get("message"))
$ python3.7 html-parser.py
Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
Element “head” is missing a required instance of child element “title”.
End of file seen and there were open elements.
Unclosed element “h1”.
1 голос
/ 04 июля 2019
    from bs4 import BeautifulSoup
    st = """<html>
    ... <head><title>I'm title</title></head>
    ... </html>"""
    st1="who are you"
    bool(BeautifulSoup(st, "html.parser").find())
    True
    bool(BeautifulSoup(st1, "html.parser").find())
    False
...