0

我正在为一个研究项目提取数据,我已经成功地findAll('div', attrs={'class':'someClassName'})在许多网站中使用过,但这个特定的网站,

网站链接

当我使用 attrs 选项时不返回任何值。但是当我不使用 attrs 选项时,我会得到整个 html dom。

这是我开始测试它的简单代码:

soup = bs(urlopen(url))
for div in soup.findAll('div', attrs={'class':'data'}):
    print div
4

2 回答 2

2

我的代码工作正常,与requests

import requests
from BeautifulSoup import BeautifulSoup as bs
#grab HTML
r = requests.get(r'http://www.amazon.com/s/ref=sr_pg_1?rh=n:172282,k%3adigital%20camera&keywords=digital%20camera&ie=UTF8&qid=1343600585')
html = r.text
#parse the HTML
soup = bs(html)

results= soup.findAll('div', attrs={'class': 'data'})

print results
于 2012-07-30T00:24:49.000 回答
1

如果您或阅读此问题的任何人想知道代码无法使用您提供的代码找到 attrs 值的原因(复制如下):

soup = bs(urlopen(url))
for div in soup.findAll('div', attrs={'class':'data'}):
    print div

问题是当您尝试创建一个 BeautifulSoup 对象时soup = bs(urlopen(url)),它的值urlopen(url)是一个响应对象而不是 DOM。

我相信您遇到的任何问题都可以通过使用bs(urlopen(url).read())来更轻松地解决。

于 2014-07-27T03:17:08.297 回答