2015-06-04 40 views
0
import urllib2 

req = urllib2.Request('http://www.amazon.com/Sweet-Virgin-Organic-Coconut-13-5oz/dp/B00Q5CIL4Y', headers={ 'User-Agent': 'Mozilla/5.0' }) 

html = urllib2.urlopen(req).read() 
print len(html) 

這是我可以製作的最小示例。如果你運行了5次,那麼響應的長度將是5769,而其他時間則是正常的可用響應。urllib2請求返回5次的不同頁面大約1次

怎麼了?

編輯:

不正確的響應:http://pastebin.com/d7zdy0uv

+0

您是否打印出HTML以查看差異? – rlbond

+0

我強烈建議使用['requests'](http://python-requests.org)。它使得使用網站**非常容易,包括直接分析標題的能力:'r = requests.get(url,headers = headers);打印r.headers'。 – MattDMo

+0

我最初在Scrapy遇到問題,我剛剛花了最後一小時將問題分解成了這個簡單的示例。我多次查看了html中的差異。如果您使用chrome導航到該網站,則正確的響應與源代碼類似,但不正確的響應在此處:http://pastebin.com/d7zdy0uv –

回答

2

鑑於短回答的內容,這變得更容易回答。亞馬遜懷疑你正在做自動抓取其網站,併爲你提供了一個驗證碼,如果你是一個使用瀏覽器的人,你可以解決。

雖然我有些驚訝,但它只是在五個請求中只有一個,而不是總是或永遠不會。

正如它在亞馬遜的迴應中所述,請考慮使用它們的API。

+0

就是這樣。謝謝。 –

0

看起來它必須對您的副作用的問題,我已經運行呢〜50倍,我得到〜49萬左右,每一次。

您的費率受限。

檢查數據的長度,當您檢測到一個短包時,您需要等待一段時間,直到您不受速率限制。 (你必須弄清楚什麼速度是可持續的)

+0

我在Ubuntu服務器上運行它。我無法使用請求,因爲我使用Scrapy的默認(下載?)發現問題。我不應該改變中間件,默認的Scrapy工具應該可以正常工作。 –