Python Beautifulsoup:如何在不知道相应属性名称的情况下通过属性值查找标签?

时间:2019-12-06 19:03:41

标签: python beautifulsoup

让我们假设我们有一个属性值“ xyz”,而不知道属性名称。这意味着我们可以匹配

    <a href="xyz">

而且

    <div class="xyz">

是否可以搜索此类标签?

2 个答案:

答案 0 :(得分:2)

一种解决方案是在c函数中使用lambda

示例:

find_all

打印:

data = '''<a href="xyz">a</a>
<div class="somethingelse">b</div>
<div class="xyz">c</div>'''

from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'html.parser')

for tag in soup.find_all(lambda tag: any('xyz' in tag[a] for a in tag.attrs)):
    print(tag)

答案 1 :(得分:0)

[tag for tag in soup.find_all(True) 
    if "xyz" in tag.attrs.values() or ["xyz"] in tag.attrs.values()]

说明:

  • soup.find_all(True)查找所有标签(因为True代表每个评估为True的标签)。

  • tag.attrstag的所有属性的字典。

  • 我们对标签属性名称(如hrefclassid)不感兴趣,仅对它们的感兴趣-因此我们使用tag.attrs.values()
  • 某些属性是多值的(例如class="x y"),因此它们在attrs词典中的值是一个列表(例如["x", "y"])。因此,我们同时测试了"xyz"["xyz"]的可能性。