如何使用Beautiful Soup按属性值选择标签

8 投票
3 回答
13942 浏览
提问于 2025-04-18 14:58

我有以下这段HTML代码:

>>> a
<div class="headercolumn">
<h2>
<a class="results" data-name="result-name" href="/xxy> my text</a>
</h2>

我想要选择只有当属性data-name等于"result-name"的表头列。

我试过这样做:

>>> a.select('a["data-name="result-name""]')

这样做的结果是:

ValueError: Unsupported or invalid CSS selector: 

我该怎么才能让它正常工作呢?

3 个回答

3

选择类或ID

soup.select('a.gamers') # select an `a` tag with the class gamers
soup.select('a#gamer') # select an `a` tag with the id gamer

选择单个属性:

soup.select('a[attr="value"]')

选择多个属性:

attr_dict = {
             'attr1': 'val1',
             'attr2': 'val2',
             'attr3': 'val3'
            }

soup.findAll('a', attr_dict)

你可以在 soup.select 中使用任何CSS选择器

11

你可以这样做:

soup = BeautifulSoup(html)
results = soup.findAll("a", {"data-name" : "result-name"})

来源:如何找到只有特定属性的标签 - BeautifulSoup

4

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能会在使用某个特定的功能时,发现它的表现和预期不一样。这种情况可能会让人感到困惑,不知道该怎么解决。

通常,解决这类问题的第一步是仔细检查代码,看看有没有拼写错误或者逻辑上的问题。有时候,问题可能出在我们对工具的理解上,或者是我们没有按照正确的方式使用它。

此外,查看相关的文档或教程也是一个好主意,因为这些资料通常会提供使用方法和常见问题的解决方案。如果还是找不到答案,可以考虑在网上的编程社区发帖求助,像StackOverflow这样的地方,很多经验丰富的程序员会乐意提供帮助。

总之,遇到问题时,不要着急,慢慢分析,查找资料,通常都能找到解决办法。

html = """
<div class="headercolumn">
<h2>
<a class="results" data-name="result-name" href="/xxy> my text</a>
</h2>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
for d in soup.findAll("div",{"class":"headercolumn"}):
    print d.a.get("data-name")
    print d.select("a.results")

result-name
[<a class="results" data-name="result-name" href="/xxy&gt; my text&lt;/a&gt;&lt;/h2&gt;"></a>]

撰写回答