Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python beautifulsoup find_all()类快捷方式不';行不通_Python_Html_Parsing_Beautifulsoup - Fatal编程技术网

Python beautifulsoup find_all()类快捷方式不';行不通

Python beautifulsoup find_all()类快捷方式不';行不通,python,html,parsing,beautifulsoup,Python,Html,Parsing,Beautifulsoup,我正在尝试查找带有class列的所有p标记 <p class="column">This is a column</p> <p class="column">More columns heh</p> 它返回了[] 然后我试着: soup.find_all(attrs={'class': 'column'}) 得到了正确的结果 这两种说法不应该相同吗?有什么不同吗?这些陈述完全相同,我无法重现您的问题: >>> from bs4

我正在尝试查找带有class
列的所有
p
标记

<p class="column">This is a column</p>
<p class="column">More columns heh</p>
它返回了
[]

然后我试着:

soup.find_all(attrs={'class': 'column'})
得到了正确的结果

这两种说法不应该相同吗?有什么不同吗?

这些陈述完全相同,我无法重现您的问题:

>>> 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'
>>来自bs4导入组
>>>汤=美汤(“”)
…

这是一个列

更多的列

... ''') >>>soup.find_all(class='column') [

这是一列,

更多的列 >>>进口bs4 >>>bs4.\u版本__ '4.1.3'

请注意,
class_u
参数是在版本4.1.2中引入的,因此请确保使用最新版本的BeautifulSoup。从:

从Beautiful Soup 4.1.2开始,您可以使用关键字参数
class\uu
按CSS类进行搜索:

>>从bs4导入BeautifulSoup作为BS
>>>soup=BS(“”“

这是一个列

更多的列 >>>list1=soup.find_all(class='column') >>>list2=soup.find_all(attrs={'class':'column'}) >>>list1==list2 真的


没有区别。我不知道为什么它对你不起作用。也许你的BeautifulSoup模块已经过时了?我也无法重现您的问题。

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

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

因此,我根据以下链接将python 2.6升级到2.7:

“”

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

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

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

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


希望有帮助

非常奇怪,我刚刚使用了您的确切代码,得到了
>>汤。find_all(class='column')[]
在版本4.1.2中引入了
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'
>>> 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