我正在尝试查找column
类的所有p
标记。
<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'})
并得到了正确的结果。
这两种说法难道不应该完全一样吗?有什么区别?
(这是我对堆栈溢出的第一个回答,所以我有点紧张!(
正如其他人所说,这两者完全相同。唯一的问题是你使用的是一个旧版本的美丽汤。正如这里所说。
在没有class_快捷方式的Beautiful Soup的旧版本中,您可以使用上面提到的attrs技巧。创建一个字典,其中"class"的值是要搜索的字符串(或正则表达式,或其他任何内容(。
希望它能有所帮助!
语句完全相同,我无法重现您的问题:
>>> 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类进行搜索
>>> 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模块已经过时了?我也无法重现你的问题。
我有像你的帖子一样的保存情况,我发现我的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/">
升级完成后,汤变得很漂亮。