python bs4没找到div

时间:2018-05-11 14:24:35

标签: python beautifulsoup

我正在试图抓取https://www.edsurge.com/product-reviews/curriculum-products/math

当我这样做时:

site = 'https://www.edsurge.com/product-reviews/curriculum-products/math'
soup = bs.BeautifulSoup(urlopen(site),"html5lib")
print soup

我可以找到我正在寻找的div <div class="browse-main p1">

但是,当我尝试使用时找到它:

for div in soup.findall('div',class_='browse-main p1'):
        print div

我收到此错误(可能意味着找不到div)。

for div in soup.findall('div',class_='browse-main p1'):
TypeError: 'NoneType' object is not callable

我也尝试使用soup.findall('div'),但找不到任何内容。 我知道我可以使用硒,但如果没有必要,我宁愿不要。我觉得奇怪的是,当我打印汤时,div就存在了。

任何人都知道发生了什么事吗? 感谢

2 个答案:

答案 0 :(得分:3)

findall为无,因此不可赎回。

尝试:

for div in soup.findAll('div',class_='browse-main p1'):

答案 1 :(得分:0)

正如@brunothe comment提到的那样:

soup实现__getattr__挂钩(用于动态属性解析),但未针对未知方法正确引发AttributeError - 而是返回None。由于该方法是名称findAll(不是findall),soup.findall实际上是对None的攻击,这当然是不可调用的,因此是错误消息。

另请注意,findAll()是bs3语法。 bs4的语法是find_all()

所以,你应该使用

soup.find_all('div',class_='browse-main p1')

而不是

soup.findall('div',class_='browse-main p1')