如何使用 lxml 和 python 遍历 html 文档的 <body> 及其 children
How do I use lxml and python to traverse the <body> of a html document along with its children
我想获取一份 html 文档并遍历文档的 <body>
部分及其 children。我看到很多通过 xpath 或标签名称获取子树的示例,但这似乎没有给出 children.
import lxml
from lxml import html, etree
html3 = "<html><head><title>test<body><h1>page title</h3><p>some text</p>"
root = lxml.html.fromstring(html3)
tree = etree.ElementTree(root)
for el in root.iter():
# do something
print(el.text, tree.getpath(el))
这将输出
None /html
None /html/head
test /html/head/title
None /html/body
page title /html/body/h1
some text /html/body/p
我只想要
page title /html/body/h1
some text /html/body/p
感谢收到的任何帮助。
我遇到了类似的困难,然后我想每个 etree 节点都有一个迭代器,如果它的父节点可以使用它来遍历
例如,这里的 root 会给你正文,你可以使用它来迭代正文的每个元素
from lxml import etree
parser = etree.HTMLParser()
tree = etree.parse('yourdocument.html', parser)
root = tree.xpath('/html/body/')[0]
for i in root.getiterator():
print(i.tag,i.text)
看来你的html代码格式不正确,我刚刚用 beautifuSoup 写了一个小程序,也许你可以用来修改你的目的:
from bs4 import BeautifulSoup
html3 = "<html><head><title>test</title></head><body><h1>page title</h1><p>some text</p><body></html>"
soup = BeautifulSoup(html3, "html5lib")
body = soup.find('body')
for item in body.findChildren():
print(item)
输出
<h1>page title</h1>
<p>some text</p>
我想获取一份 html 文档并遍历文档的 <body>
部分及其 children。我看到很多通过 xpath 或标签名称获取子树的示例,但这似乎没有给出 children.
import lxml
from lxml import html, etree
html3 = "<html><head><title>test<body><h1>page title</h3><p>some text</p>"
root = lxml.html.fromstring(html3)
tree = etree.ElementTree(root)
for el in root.iter():
# do something
print(el.text, tree.getpath(el))
这将输出
None /html
None /html/head
test /html/head/title
None /html/body
page title /html/body/h1
some text /html/body/p
我只想要
page title /html/body/h1
some text /html/body/p
感谢收到的任何帮助。
我遇到了类似的困难,然后我想每个 etree 节点都有一个迭代器,如果它的父节点可以使用它来遍历
例如,这里的 root 会给你正文,你可以使用它来迭代正文的每个元素
from lxml import etree
parser = etree.HTMLParser()
tree = etree.parse('yourdocument.html', parser)
root = tree.xpath('/html/body/')[0]
for i in root.getiterator():
print(i.tag,i.text)
看来你的html代码格式不正确,我刚刚用 beautifuSoup 写了一个小程序,也许你可以用来修改你的目的:
from bs4 import BeautifulSoup
html3 = "<html><head><title>test</title></head><body><h1>page title</h1><p>some text</p><body></html>"
soup = BeautifulSoup(html3, "html5lib")
body = soup.find('body')
for item in body.findChildren():
print(item)
输出
<h1>page title</h1>
<p>some text</p>