beautifulsoup 的 find_all() 类快捷方式无法使用

3 投票
4 回答
4109 浏览
提问于 2025-04-17 13:17

我想找到所有带有类名 columnp 标签。

<p class="column">This is a column</p>
<p class="column">More columns heh</p>

我试着这样做:

soup.find_all(class_='column')

结果返回了 [],也就是没有找到任何东西。

然后我又试了这个:

soup.find_all(attrs={'class': 'column'})

结果是正确的,找到了我想要的。

这两个语句不是应该是一样的吗?它们有什么区别呢?

4 个回答

0
>>> from bs4 import BeautifulSoup as BS
>>> soup = BS('''<p class="column">This is a column</p>
<p class="column">More columns heh</p>''')
>>> list1 = soup.find_all(class_='column')
>>> list2 = soup.find_all(attrs={'class': 'column'})
>>> list1 == list2
True

其实没有什么区别。我不太明白为什么对你不管用。可能是你的BeautifulSoup模块版本太旧了吧?我也没法重现你遇到的问题。

1

(这是我在Stack Overflow上的第一次回答,所以我有点紧张!)

正如其他人所说,这两个是完全一样的。唯一的问题是你使用的是旧版本的Beautiful Soup。具体可以查看这里

在旧版本的Beautiful Soup中,没有class_这个快捷方式,你可以使用上面提到的attrs技巧。你可以创建一个字典,把“class”的值设置为你想要搜索的字符串(或者正则表达式,或者其他任何东西)。

希望这对你有帮助!

0

这些语句是完全一样的,我无法重现你遇到的问题:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''<div>
... <p class="column">This is a column</p>
... <p class="column">More columns heh</p>
... </div>''')
>>> soup.find_all(class_='column')
[<p class="column">This is a column</p>, <p class="column">More columns heh</p>]
>>> import bs4
>>> bs4.__version__
'4.1.3'

请注意,class_这个参数是在4.1.2版本中引入的,所以请确保你使用的是最新版本的BeautifulSoup。关于这个参数的详细信息,可以查看通过CSS类搜索这一部分

从Beautiful Soup 4.1.2开始,你可以使用关键字参数class_来通过CSS类进行搜索:

撰写回答