3

我正在尝试p使用 class 查找所有标签column

<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

4 回答 4

1

(这是我对堆栈溢出的第一个答案,所以我有点紧张!)

正如其他人所说,这两者完全相同。唯一的问题是您使用的是旧版本的 Beautiful Soup。正如这里所说。

在没有 class_ 快捷方式的旧版本 Beautiful Soup 中,您可以使用上面提到的 attrs 技巧。创建一个字典,其“类”的值是您要搜索的字符串(或正则表达式,或其他)。

希望它有所帮助!

于 2018-12-20T03:27:39.137 回答
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 开始,您可以使用关键字参数按 CSS 类进行搜索class_

于 2013-01-20T23:01:18.050 回答
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 模块已经过时了?我也无法重现您的问题。

于 2013-01-21T04:08:59.433 回答
0

我有像你的帖子那样的保存情况,我发现我的 CentOS python 版本是 2.6.6,而 BeautifulSoup 4.1.0 他们在帮助文档中说:

“本文档中的示例在 Python 2.7 和 Python 3.2 中的工作方式应该相同。”

所以我根据这个链接将我的 python 2.6 升级到 2.7:

http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/

升级完成后,汤变得漂亮了。

于 2014-06-18T10:55:04.770 回答