1.什么是狀態碼301
301 Moved Permanently(永久重定向) 被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個URI之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。
比如,我們訪問 http://www.baidu.com 會跳轉到 https://www.baidu.com,發送請求之后,就會返回301狀態碼,然后返回一個location,提示新的地址,瀏覽器就會拿着這個新的地址去訪問。
注意: 301請求是可以緩存的, 即通過看status code,可以發現后面寫着from cache。
或者你把你的網頁的名稱從php修改為了html,這個過程中,也會發生永久重定向。
2.如何處理
首先我們可以使用scrapy框架中的 scrapy shell 進行測試
跳轉前后的url如果是一致的,我們在終端命令行輸入 :
scrapy shell http://www.7gz.com/gzzixun/106826.html
觀察到log中信息包含:
[scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.7gz.com/gzzixun/106826.html> (referer: None)
說明我們可以正常訪問這個網址,只是跳轉網址未改變,狀態碼是301。
這個時候我們需要在scrapy框架中的 settings.py 文件里添加
HTTPERROR_ALLOWED_CODES = [301]
這樣再運行就不會產生301的log信息了,爬蟲可以正常運行。