我正在尝试将所有超文本标记语言节点转换为XPATH这是一个示例输入。基于超文本标记语言,我正在寻找所有子节点的所有XPATH
<html>
<head>
<title>
The Dormouse's story
</title>
</head>
<body>
<p class="title">
<b>
The Dormouse's story
</b>
</p>
<span>Hello</span>
</body>
</html>
我想要的输出
html
html/head
html/head/title
html/body
html/body/p
我目前拥有的
{
"name": "[document]",
"attr": {},
"children": [
{
"name": "html",
"attr": {},
"children": [
{
"name": "head",
"attr": {},
"children": [
{
"name": "title",
"attr": {},
"children": []
}
]
},
{
"name": "body",
"attr": {},
"children": [
{
"name": "p",
"attr": {
"class": [
"title"
]
},
"children": [
{
"name": "b",
"attr": {},
"children": []
}
]
},
{
"name": "span",
"attr": {},
"children": []
}
]
}
]
}
]
}
代码
try:
import os
import lxml.etree
from bs4 import BeautifulSoup
import json
import etree
except Exception as e:
pass
def traverse(soup):
if soup.name is not None:
dom_dictionary = {}
dom_dictionary['name'] = soup.name
dom_dictionary['attr'] = soup.attrs
dom_dictionary['children'] = [
traverse(child)
for child in soup.children if child.name is not None
]
return dom_dictionary
with open("html.txt", "r") as f:
data = f.read()
soup = BeautifulSoup(data, 'html.parser')
JsonDom = traverse(soup)
print(json.dumps(JsonDom, indent=4))
如果你们能给我指出正确的方向,任何帮助都会很好
我确实研究了Lxml bs4和硒,但不幸的是没有运气
html_doc = """
<html>
<head>
<title>
The Dormouse's story
</title>
</head>
<body>
<p class="title">
<b>
The Dormouse's story
</b>
</p>
<span>Hello</span>
</body>
</html>
"""
def generate(soup, cur=""):
for tag in soup.find_all(recursive=False):
yield cur + tag.name
yield from generate(tag, cur=cur + tag.name + "/")
soup = BeautifulSoup(html_doc, "html.parser") # you can also use "lxml" or "html5lib"
for t in generate(soup):
print(t)
打印:
html
html/head
html/head/title
html/body
html/body/p
html/body/p/b
html/body/span
我有一个场景 我想从一个特定的节点(比如ID:7)开始运行BFS 如果有无法从该节点访问的节点,我想重新启动BFS(使用任何剩余节点),直到访问图的所有顶点 到目前为止,我得到的是从节点0开始并用另一个未访问的顶点重新启动的代码(部分): 如何有效地更改此代码以满足我的要求?
我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如
问题内容: 我可以这样做: 但是,鉴于使用XPath可以简单地查询并完成它的事实,这似乎是微不足道的。 在IE9 +,Safari5 +,Chrome19+,Firefox12+,Opera11+上运行的HTML文档中,在特定元素下获取所有文本节点的最简单方法是什么? “最简单”被粗略地定义为“高效而又短,没有打高尔夫球”。 问题答案: 根据@kennebec的回答,该逻辑的实现略为严格: 但是,
问题内容: 在使用Jenkins Docker插件时,可能由于错误而导致无法启动群集。我没有注意,目前有数千个脱机节点无法启动。 底线-是否可以批量删除Jenkin中的节点(从属),清理所有脱机节点甚至删除所有节点?重置Jenkins服务器没有帮助,而且我在Jenkins API中找不到方法。 在我开始编写Selenium脚本之类的东西之前,请感谢任何想法。 非常感谢! 问题答案: 该脚本的注释部
你们这些家伙,我有这样一个HTML: 这是将上述所有选项放入列表的代码: 实际上它不起作用。我不知道我错在哪里。请帮帮我。非常感谢。
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我的mySQL数据库中有如下表: 对于谓词,它将具有如下树视图: 我想创建一个可以选择起始节点并为此获得所有父节点的表单。例如,通过选择我想要获得: 步骤2: 有什么方法可以使用以下简单文本来打印此节点: 问题答案: 您的数据可以在RDF中表