lxml: cssselect (): AttributeError: объект 'lxml.etree._Element' не имеет атрибута 'cssselect'

Может кто-нибудь объяснить, почему первый вызов root.cssselect() работает, а второй не удается?

 from lxml.html import fromstring from lxml import etree html='<html><a href="http://example.com">example</a></html' root = fromstring(html) print 'via fromstring', repr(root) # via fromstring <Element html at 0x...> print root.cssselect("a") root2 = etree.HTML(html) print 'via etree.HTML()', repr(root2) # via etree.HTML() <Element html at 0x...> root2.cssselect("a") # --> Exception 

Я получил:

 Traceback (most recent call last): File "/home/foo_eins_d/src/foo.py", line 11, in <module> root2.cssselect("a") AttributeError: 'lxml.etree._Element' object has no attribute 'cssselect' 

Версия: lxml==3.4.4

One Solution collect form web for “lxml: cssselect (): AttributeError: объект 'lxml.etree._Element' не имеет атрибута 'cssselect'”

Разница заключается в типе элемента. Пример –

 In [12]: root = etree.HTML(html) In [13]: root = fromstring(html) In [14]: root2 = etree.HTML(html) In [15]: type(root) Out[15]: lxml.html.HtmlElement In [16]: type(root2) Out[16]: lxml.etree._Element 

lxml.html.HTMLElement имеет метод cssselect() . Кроме того, HTMLElement является подклассом etree._Element .

Но lxml.etree._Element не имеет этого метода.

Если вы хотите разобрать html, вы должны использовать lxml.html .

Python - лучший язык программирования в мире.