scrapy下載圖片報[scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt:錯誤

jiuyang發表於2017-10-27

本文轉自:http://blog.csdn.net/zzk1995/article/details/51628205

 

先說結論,關閉scrapy自帶的ROBOTSTXT_OBEY功能,在setting找到這個變數,設定為False即可解決。
使用scrapy爬取淘寶頁面的時候,在提交http請求時出現debug資訊Forbidden by robots.txt,看來是請求被拒絕了。開始因為是淘寶頁面有什麼保密機制,防止爬蟲來抓取頁面,於是在spider中填入各種header資訊,偽裝成瀏覽器,結果還是不行。。。用chrome抓包看了半天感覺沒有影響簡單頁面抓取的機制(其他保密機制應該還是有的,開啟一個頁面時,向不同伺服器遞交了很多請求,還設定了一些不知道幹啥的cookies),最後用urllib偽造請求發現頁面都能抓取回來。於是上網查了一下robot.txt是什麼,發現原來有個robot協議,終於恍然大悟:
我們觀察scrapy抓包時的輸出就能發現,在請求我們設定的url之前,它會先向伺服器根目錄請求一個txt檔案:

2016-06-10 18:16:26 [scrapy] DEBUG: Crawled (200) <GET https://item.taobao.com/robots.txt> (referer: None)
  • 1
  • 2

這個檔案中規定了本站點允許的爬蟲機器爬取的範圍(比如你不想讓百度爬取你的頁面,就可以通過robot來限制),因為預設scrapy遵守robot協議,所以會先請求這個檔案檢視自己的許可權,而我們現在訪問這個url得到

User-agent: *
Disallow: /
  • 1
  • 2

可以看見,淘寶disallow根目錄以下所有頁面。。。。(似乎有新聞說淘寶關閉了爬蟲對它們的爬取許可權,因為涉及到使用者隱私)所以scrapy就停止了之後的請求和頁面解析。
我們在setting改變ROBOTSTXT_OBEY為False,讓scrapy不要遵守robot協議,之後就能正常爬取了。

2016-06-10 18:27:38 [scrapy] INFO: Spider opened
2016-06-10 18:27:38 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-06-10 18:27:38 [scrapy] DEBUG: Crawled (200) <GET https://item.taobao.com/xxxxxxx> (referer: None)
  • 1
  • 2
  • 3
  • 4

對於使用robot協議的站點,只需要我們的爬蟲不遵守該協議,就可以了,但是對於防止爬蟲爬取,站點還有檢查請求頭、檢查ip等等手段,還需要其他的相應處理。

 

本文來源:http://blog.csdn.net/zzk1995/article/details/51628205

相關文章