beautifulsoup 的 find_all() 类快捷方式无法使用
我想找到所有带有类名 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'})
结果是正确的,找到了我想要的。
这两个语句不是应该是一样的吗?它们有什么区别呢?
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类进行搜索: