首页 > 解决方案 > 标记值不打印 etree lxml

问题描述

我想打印代码的“可打印字符串”部分。我也尝试打印整个标签本身,但没有找到打印整个标签而不仅仅是标签名称的方法。检索 Xpath 和整个标签本身是目前最大的挑战,谢谢!

代码:

from bs4 import BeautifulSoup
from lxml import etree

doc = "<p><a></a><a></a>Printable String</p>"
soup = BeautifulSoup(doc, "lxml")
root = etree.fromstring(str(soup))

tree = etree.ElementTree(root)
for i, e in enumerate(root.iter()):
    print(e.text)

输出:

None
None
None
None
None
[Finished in 0.2s]

预期输出:

None 
None
Printable String
None 
None

标签: pythonhtmlxpathlxmlelementtree

解决方案


有几点需要注意:

首先,由于某种原因,您doc先用 lxmlsoup解析,然后再用 lxml 解析字符串soup。第一个问题是 BS 没有留下字符串。如果你

print(soup)

输出是

<html><body><p><a></a><a></a>Printable String</p></body></html>

您会注意到现在添加了两个新元素 (html和),这就解释了为什么您会得到五个而不是三个。bodyNone

如果您doc像这样直接使用 lxml 解析并使用 xpath:

doc = "<p><a></a><a></a>Printable String</p>"
root = etree.fromstring(doc)
for z in root.xpath('//*'):
    print(z.xpath('text()'))

输出是

['Printable String']
[]
[]

推荐阅读