查找包含给定文本的未知标签

问题描述

我的HTML就像:

<body>
  <div class="afds">
    <span class="dfsdf">mytext</span>
  </div>
  <div class="sdf dzf">
    <h1>some random text</h1>
  </div>
</body>

我想找到所有包含“ 文本”的标签及其对应的类。在这种情况下,我想要:

  • span,“ dfsdf”
  • h1,空

接下来,我希望能够浏览返回的标签。例如,找到 div 标记以及所有返回标记的相应类别。

如果我执行以下操作

soupx.find_all(text=re.compile(".*text.*"))

它只是返回标签的文本部分:

['mytext',' some random text']

请帮助。

解决方法

您可能正在寻找符合以下条件的东西:

ts = soup.find_all(text=re.compile(".*text.*"))
for t in ts:
    if len(t.parent.attrs)>0:
        for k in t.parent.attrs.keys():
            print(t.parent.name,t.parent.attrs[k][0])
    else:
        print(t.parent.name,"null")

输出:

span dfsdf
h1 null
,

find_all()不仅返回字符串,还返回bs4.element.NavigableString。 这意味着您可以在这些结果上调用其他beautifulsoup函数。

看看find_parent和find_parents:documentation

childs = soupx.find_all(text=re.compile(".*text.*"))
for c in childs:
    c.find_parent("div")