Разбор HTML с использованием lxml и html5lib, получая «TypeError: insertDoctype () принимает ровно 4 аргумента (2 дано)» - PullRequest
1 голос
/ 03 апреля 2011

Я получаю ошибку TypeError: insertDoctype() takes exactly 4 arguments (2 given) при совместном использовании lxml и html5lib. Кажется, что метод insertDoctype в lxml.html._html5builder.TreeBuilder ( link ) принимает 4 аргумента, а код html5lib ( link ) вызывает его с 2 аргументами. Я как-то использую это неправильно?

Вот версии, которые я использую:

$ pip freeze
BeautifulSoup==3.2.0
distribute==0.6.14
html5lib==0.90
lxml==2.3
mechanize==0.2.4
wsgiref==0.1.2

Мой исходный код:

from lxml.html import html5parser

html5parser.document_fromstring('''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>t</title><body></body></html>''')

И ошибка:

Traceback (most recent call last):
  File "/tmp/t.py", line 4, in <module>
    <html><head><title>t</title><body></body></html>''')
  File "/Users/me/.virtualenvs/myenv/lib/python2.6/site-packages/lxml/html/html5parser.py", line 54, in document_fromstring
    return parser.parse(html, useChardet=guess_charset).getroot()
  File "/Users/me/.virtualenvs/myenv/lib/python2.6/site-packages/html5lib/html5parser.py", line 211, in parse
    parseMeta=parseMeta, useChardet=useChardet)
  File "/Users/me/.virtualenvs/myenv/lib/python2.6/site-packages/html5lib/html5parser.py", line 111, in _parse
    self.mainLoop()
  File "/Users/me/.virtualenvs/myenv/lib/python2.6/site-packages/html5lib/html5parser.py", line 189, in mainLoop
    self.phase.processDoctype(token)
  File "/Users/me/.virtualenvs/myenv/lib/python2.6/site-packages/html5lib/html5parser.py", line 482, in processDoctype
    self.tree.insertDoctype(token)
TypeError: insertDoctype() takes exactly 4 arguments (2 given)
...