beautifulsoup find_all()类快捷方式不起作用

时间:2013-01-20 22:46:10

标签: python html parsing beautifulsoup

我正在尝试使用类p查找所有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 个答案:

答案 0 :(得分:1)

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

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

  

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

希望它有所帮助!

答案 1 :(得分: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'

请注意,版本4.1.2中引入了class_参数,因此请确保使用最新版本的BeautifulSoup。来自Searching by CSS class section

  

从Beautiful Soup 4.1.2开始,您可以使用关键字参数class_按CSS类搜索:

答案 2 :(得分: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模块已经过时了?我也无法重现你的问题。

答案 3 :(得分:0)

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

&#34;本文档中的示例在Python 2.7和Python 3.2中的工作方式应该相同。&#34;

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

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

升级完成后,汤变得美丽。