python - 使用 lxml.html 解析 HTML 时等价于 InnerHTML

标签 python parsing lxml

我正在编写一个使用 lxml.html 来解析网页的脚本。我曾经做过一些 BeautifulSoup,但由于它的速度,我现在正在尝试使用 lxml。

我想知道在库中最明智的方法是做相当于 Javascript 的 InnerHtml 的方法——即检索或设置标签的完整内容。

<body>
<h1>A title</h1>
<p>Some text</p>
</body>

InnerHtml 因此是:

<h1>A title</h1>
<p>Some text</p>

我可以使用 hacks(转换为字符串/正则表达式等)来做到这一点,但我假设有一种正确的方法可以使用由于不熟悉而丢失的库。感谢您的帮助。

编辑:感谢 pobk 如此快速有效地向我展示了这方面的方法。对于任何尝试相同的人,这就是我最终得到的结果:

from lxml import html
from cStringIO import StringIO
t = html.parse(StringIO(
"""<body>
<h1>A title</h1>
<p>Some text</p>
Untagged text
<p>
Unclosed p tag
</body>"""))
root = t.getroot()
body = root.body
print (element.text or '') + ''.join([html.tostring(child) for child in body.iterdescendants()])

请注意,lxml.html 解析器会修复未关闭的标签,因此请注意这是否有问题。

最佳答案

很抱歉再次提出此问题,但我一直在寻找解决方案,而您的解决方案包含错误:

<body>This text is ignored
<h1>Title</h1><p>Some text</p></body>

直接在根元素下的文本被忽略。我最终这样做了:

(body.text or '') +\
''.join([html.tostring(child) for child in body.iterchildren()])

关于python - 使用 lxml.html 解析 HTML 时等价于 InnerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6123351/

相关文章:

java - Perl 兼容正则表达式引擎 : how implemented?

C - 读取和解析方法未获得第二行输入

Xcode 6.3 解析 SDK 1.7.1 PFTableViewCell 错误 "has incompatible type"

python - 如何在 Python 中连接单个引号

python - 为什么多线程不加速用lxml解析HTML?

python - 使用 SciPy 在矩形网格上集成 2D 样本

python - 模块未找到错误: No module named 'posts' in Django

python - 如何转义特殊字符以使用 LXML 编写 XML

python - 使用循环绘制多个图,然后组合这些图

python - Aggfunc 的 Pandas 数据透视表列表