python - 如何查找对特定数据有效的所有 HTML 标签的列表

标签 python html beautifulsoup html-parsing

我想解析 HTML 以将其转换为其他格式,同时保留一些样式(粗体、列表等)。

为了更好地解释我的意思,

考虑以下代码:

<html>
<body>

<h2>A Nested List</h2>
<p>List <b>can</b> be nested (lists inside lists):</p>

<ul>
  <li>Coffee</li>
  <li>Tea
    <ul>
      <li>Black tea</li>
      <li>Green tea</li>
    </ul>
  </li>
  <li>Milk</li>
</ul>

</body>
</html>

现在,如果我要在段落开头选择单词“List”,我的输出应该是 (html, body,p),因为这些是单词“List”上事件的标签。

另一个例子,如果我选择单词“Black tea”,我的输出应该是 (html,body,ul,li,ul,li),因为它是嵌套列表的一部分。

我已经看到 chrome 检查器执行此操作,但我不确定如何使用 Python 在代码中执行此操作。

这是 chrome 检查器显示的图像: Chrome Inspector

我尝试使用 Beautiful soup 解析 HTML,虽然获取数据的效果令人惊叹,但我无法使用它解决我的问题。

后来我尝试了 html-parser 来解决同样的问题,尝试在“数据”之前创建一个所有标签的堆栈,并在遇到相应的结束标签时将它们弹出,但我也无法做到。

最佳答案

正如您在评论中所说,它可能会也可能不会给您带来您想要的东西,但这可能是一个开始。所以无论如何我都会尝试一下,看看会发生什么:

from lxml import etree
snippet = """[your html above]"""
root = etree.fromstring(snippet)

tree = etree.ElementTree(root)
targets = ['List','nested','Black tea']
for e in root.iter():
    for target in targets:
        if (e.text and  target in e.text) or (e.tail and target in e.tail):
            print(target,' :',tree.getpath(e))    

输出为

List  : /html/body/h2
List  : /html/body/p
nested  : /html/body/p/b
Black tea  : /html/body/ul/li[2]/ul/li[1]

如您所见,它的作用是为您提供所选文本目标的 xpath。有几点需要注意:首先,“List”出现两次,因为它出现了文本的两倍。第二:“Black tea”xpath 包含位置值(例如, [2] 中的 /li[2] ),指示目标字符串出现在第二个 li 中。代码片段的元素等。如果您不需要,您可能需要从输出中删除该信息(或使用其他工具)。

关于python - 如何查找对特定数据有效的所有 HTML 标签的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58748641/

相关文章:

html - jqueryUI 自动完成建议在 Chrome 中错位

python - 使用 Regex + BeautifulSoup 抓取 XML 并存储到 Pandas

python - 是否可以使用 pyinstaller 来构建带有我自己的图标的 exe?

python - SQLalchemy 数据库级锁定

javascript - 我需要帮助来修复表单中的空白电子邮件

python - 如何使用 BeautifulSoup 获取嵌套在 TD 中的 DIV 内部的链接

python - BeautifulSoup 找不到标签 li

python - 在python中测试是否已经获取了锁

python - 从 Python 脚本运行 Maven 的方法?

java - 本地驱动器中图像的路径