解析本地HTML Python(lxml)

4

我正在尝试使用lxml解析本地HTML文件,但是遇到了错误,但我不知道原因(抱歉,代码很糟糕,我是新手)。

from lxml import etree, html
from StringIO import StringIO

parser = etree.HTMLParser()
doc = etree.parse(StringIO("test1.html"), parser)
tree = html.fromstring(doc)
CCE = tree.xpath('//div[@data-reactid]/div[@class="browse-summary"]/h1')
URL = tree.xpath('//a[@class="rc-OfferingCard"]/@href')

print 'CCE:', CCE
print 'URL:', URL

以下是错误信息:

  File "test.py", line 8, in <module>
tree = html.fromstring(doc)
File "/usr/lib/python2.7/dist-packages/lxml/html/__init__.py", line 703, in fromstring
is_full_html = _looks_like_full_html_unicode(html)
TypeError: expected string or buffer

1
我认为你的HTML不是有效的,请确保使用https://validator.w3.org/验证`test1.html`的有效性。 - SIslam
3
StringIO 用于将变量中的文本视为打开的文件,而不是用于加载文件。 - furas
3
html.fromstring 需要一个字符串作为输入,但你却给它 etree.parse 的结果(不是字符串)。请注意更正。 - Boldewyn
谢谢,属性和元素中存在一些小错误,事实上。 - Lara M.
1个回答

7
我认为您需要:

tree = etree.parse("text1.html", parser)

没有使用StringIOfromstring

1
是的!它完美地工作了!谢谢,由于我的声望较低,我无法为您的答案提供反馈,但它很好用!! - Lara M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接