标签值不打印 etree lxml
Tag value not printing 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
就这么简单:-
from bs4 import BeautifulSoup
doc = "<p><a></a><a></a>Printable String</p>"
soup = BeautifulSoup(doc, "lxml")
print(soup.find('p').text)
...或者如果您想要纯 etree 解决方案,则:-
from lxml import etree
from io import StringIO
doc = '<p><a></a><a></a>Printable String</p>'
tree = etree.parse(StringIO(doc))
print(tree.xpath('//p/text()')[0])
有两点需要注意:
首先,出于某种原因,您首先用 soup
解析 doc
,然后再次用 lxml 解析 soup
的字符串。第一个问题是 BS 没有留下字符串。如果你
print(soup)
输出是
<html><body><p><a></a><a></a>Printable String</p></body></html>
您会注意到现在添加了两个新元素(html
和 body
),这解释了为什么您得到五个 None
而不是三个。
如果你像这样直接用 lxml 解析 doc
并使用 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']
[]
[]
我想打印代码的“可打印字符串”部分。我还尝试自己打印整个标签,但没有找到打印整个标签而不仅仅是标签名称的方法。检索 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
就这么简单:-
from bs4 import BeautifulSoup
doc = "<p><a></a><a></a>Printable String</p>"
soup = BeautifulSoup(doc, "lxml")
print(soup.find('p').text)
...或者如果您想要纯 etree 解决方案,则:-
from lxml import etree
from io import StringIO
doc = '<p><a></a><a></a>Printable String</p>'
tree = etree.parse(StringIO(doc))
print(tree.xpath('//p/text()')[0])
有两点需要注意:
首先,出于某种原因,您首先用 soup
解析 doc
,然后再次用 lxml 解析 soup
的字符串。第一个问题是 BS 没有留下字符串。如果你
print(soup)
输出是
<html><body><p><a></a><a></a>Printable String</p></body></html>
您会注意到现在添加了两个新元素(html
和 body
),这解释了为什么您得到五个 None
而不是三个。
如果你像这样直接用 lxml 解析 doc
并使用 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']
[]
[]