使用findAll时BeautifulSoup总是返回null

1 投票
1 回答
711 浏览
提问于 2025-04-16 11:29

我正在尝试使用BeautifulSoup来解析一些网页,但每次我用findAll的时候,它总是返回空值,尽管我可以正常访问像soup.title这样的内容。

我现在正在尝试解析这个链接,但是当我尝试对它进行操作时,得到的结果是:

>>> site = urllib2.urlopen('http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&IsNodeId=1&Description=nvidia%20gtx%20560%20ti&bop=And&Order=PRICE&PageSize=20')                                                                                                                            
>>> soup = BeautifulSoup(site)                                                                                  
>>> soup.title                                                                                                                                   
<title>Newegg.com - nvidia gtx 560 ti</title>                                                                                                    
>>> soup.findAll('title')                                                                                                                        
Null                                                                                                                                             
>>>

有没有人知道为什么会这样?我使用的是BeautifulSoup 2.1.1版本。

1 个回答

1

你正在使用一个旧版本的BeautifulSoup,这个版本没有findAll这个方法。我记得旧版本里类似的功能叫做fetchfindAll这个方法是在BeautifulSoup 3.0.0版本中新增的,那时候方法的命名变得更统一了。从文档中可以看到:

以前的Beautiful Soup版本有一些方法,比如first、fetch和fetchPrevious。这些方法现在仍然存在,但已经被标记为不推荐使用,可能很快就会被删除。所有这些名字的组合让人感到很困惑。新的命名方式更一致:如上所述,如果方法名是复数或者提到“All”,那么它会返回多个对象。否则,它只会返回一个对象。

撰写回答