我正在试图抓取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就存在了。
任何人都知道发生了什么事吗? 感谢
答案 0 :(得分:3)
findall
为无,因此不可赎回。
尝试:
for div in soup.findAll('div',class_='browse-main p1'):
答案 1 :(得分:0)
正如@bruno中the 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')