2012-07-29 29 views
0

我是一個研究項目中提取數據,我已經成功地應用於許多網站findAll('div', attrs={'class':'someClassName'})但該特定網站,Beautifulsoup無法使用ATTRS數據提取= A類

WebSite Link

不會返回當任何值我使用attrs選項。但是當我不使用attrs選項時,我會得到完整的html dom。

下面是簡單的代碼,我開始對它進行測試:

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

如果通過urllib2檢索,則沒有類爲「data」的元素。 – Ansari 2012-07-30 00:21:27

+0

我已將它用於其他網站,並且可以正常使用urllib2 – 2012-07-30 01:40:15

+0

也許亞馬遜爲完整的瀏覽器提供不同的內容。 – Ansari 2012-07-30 04:54:14

回答

1

我的代碼工作正常,與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 
+0

而不是請求我想使用urlopen,並用urlopen足夠奇怪我無法獲得dom。 – 2012-07-30 01:33:11

+0

對不起,我對'urlopen'一無所知。爲什麼不使用請求呢? http://docs.python-requests.org/en/latest/index.html – TankorSmash 2012-07-30 01:55:44

0

如果你或任何人閱讀這個問題想知道代碼無法使用您提供的代碼找到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())來更容易解決。