Python: трассировка при использовании lxml - PullRequest
0 голосов
/ 04 апреля 2019

код:

response = urllib2.urlopen('xxxxxxwebsite address')
html = response.read()
tree = etree.fromstring(html)
nodes = tree.xpath("//span[contains(@class,'badge-info')")
for node in nodes:
    print(node.text)

Ошибка:

Traceback (most recent call last):
  File "extract1.py", line 11, in <module>
    tree = etree.fromstring(html)
  File "src\lxml\etree.pyx", line 3222, in lxml.etree.fromstring
  File "src\lxml\parser.pxi", line 1877, in lxml.etree._parseMemoryDocument
  File "src\lxml\parser.pxi", line 1765, in lxml.etree._parseDoc
  File "src\lxml\parser.pxi", line 1127, in lxml.etree._BaseParser._parseDoc
  File "src\lxml\parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
  File "src\lxml\parser.pxi", line 711, in lxml.etree._handleParseResult
  File "src\lxml\parser.pxi", line 640, in lxml.etree._raiseParseError
  File "<string>", line 42
lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 24 and head, line 42, column 8

Plesae посоветуйте мне, если есть лучший способ чтения, чем lxml.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

HTML не является правильно сформированным XML, поэтому вам придется либо использовать HTMLParser() или HTML(), чтобы lxml мог восстановиться.

См. " Синтаксический анализ HTML " для получения дополнительной информации.

0 голосов
/ 04 апреля 2019

У вас есть опечатка:

tree.xpath("//span[contains(@class,'badge-info')]")
#                                               ^ unclosed
...