Разбор HTML: ошибка lxml в Python - PullRequest
       14

Разбор HTML: ошибка lxml в Python

3 голосов
/ 07 декабря 2010

Я пишу простой скрипт для извлечения большой серой таблицы из здесь .

Код, который у меня есть, следующий:

import urllib2
from lxml import etree

html = urllib2.urlopen("http://www.afi.com/100years/movies10.aspx").read()

root = etree.XML(html)

Но я получаю ошибку в последнем утверждении.

Traceback (most recent call last):
  File "D:\Workspace\afi100\afi100.py", line 13, in <module>
    root = etree.XML(html)
  File "lxml.etree.pyx", line 2720, in lxml.etree.XML (src/lxml/lxml.etree.c:52577)
  File "parser.pxi", line 1556, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:79602)
  File "parser.pxi", line 1435, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:78449)
  File "parser.pxi", line 943, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:75099)
  File "parser.pxi", line 547, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:71467)
  File "parser.pxi", line 628, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:72340)
  File "parser.pxi", line 568, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:71683)
XMLSyntaxError: Space required after the Public Identifier, line 3, column 59

Есть идеи, как обойти эту ошибку?

Спасибо.

Ответы [ 2 ]

9 голосов
/ 07 декабря 2010

Вы пытаетесь проанализировать HTML с помощью синтаксического анализатора XML, вам следует использовать HTML-анализатор lxml.

import urllib2
from StringIO import StringIO
from lxml import etree

ufile = urllib2.urlopen("http://www.afi.com/100years/movies10.aspx")

root = etree.parse(ufile, etree.HTMLParser())

print etree.tostring(root)
1 голос
/ 07 декабря 2010

Документ, на который вы ссылаетесь, не является правильно сформированным XHTML, поэтому вы не можете использовать XML-анализатор для его загрузки.

Вместо этого вы должны использовать анализатор HTML, например Beautiful Soup .

...