简体   繁体   English

如何使用lxml获取损坏的html的文本

[英]How to get text of broken html with lxml

Here's what I have: 这是我所拥有的:

r = requests.get("http://www.cnn.com/")
htmlelement = lxml.html.fromstring(r.text)
html = lxml.html.tostring(htmlelement)
tree = lxml.etree.fromstring(html)
print tree.xpath('//*[@id="cnn_maintt1imgbul"]/div/div[2]/div/h1/a')

I thought xml.html corrected the broken html? 我以为xml.html更正了损坏的html?

The error is: 错误是:

XMLSyntaxError: Opening and ending tag mismatch: link line 32 and head, line 75, column 8 XMLSyntaxError:开头和结尾标签不匹配:链接第32行和头部,第75行,第8列

Thanks! 谢谢!

I don't understand why you're trying to reparse the content after getting this far: 我不明白为什么您要在达到这一目标后重新解析内容:

>>> htmlelement = lxml.html.fromstring(r.text)

Because at this point you can simply apply your xpath expression: 因为此时您可以简单地应用xpath表达式:

>>> results = htmlelement.xpath('//*[@id="cnn_maintt1imgbul"]/div/div[2]/div/h1/a')
>>> results
[<Element a at 0x1113a1f50>]
>>> print lxml.html.tostring(results[0])
'<a href="/2014/04/26/world/asia/south-korea-ship-sinking/index.html?hpt=hp_t1" target="">SOUTH KOREAN PRIME MINISTER RESIGNS</a>'

I believe your problem is that lxml.html.tostring() still generates HTML, which you then try to parse with the XML parser. 我相信您的问题是lxml.html.tostring()仍然生成HTML,然后您尝试使用XML解析器进行解析。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM