2014-04-01 273 views
9

我收到了來自服務器的302響應而報廢網站302重定向:如何處理scrapy

2014-04-01 21:31:51+0200 [ahrefs-h] DEBUG: Redirecting (302) to <GET http://www.domain.com/Site_Abuse/DeadEnd.htm> from <GET http://domain.com/wps/showmodel.asp?Type=15&make=damc&a=664&b=51&c=0> 

我要發送請求來獲取網址,而不是重定向。現在我發現這個中間件:

https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/downloadermiddleware/redirect.py#L31

我加入這個重定向代碼到我的middleware.py文件,我加入到這個settings.py:

DOWNLOADER_MIDDLEWARES = { 
'street.middlewares.RandomUserAgentMiddleware': 400, 
'street.middlewares.RedirectMiddleware': 100, 
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None, 
} 

但我還是被重定向。這就是爲了讓這個中間件工作而必須做的一切嗎?我想念什麼?

+0

他們可能無休止地將您重定向到您的網站。至少,這就是網址讓我相信的地方。 – elbear

+0

是的,這顯然是他們參加,我之所以發佈這個問題。它不是一個無限循環,它簡單的302重定向,原始url仍然以GET方式接收:從那就是我想要發送我的請求的URL。據我所知,這是可能的,我發現了一個腳本,但由於某種原因,我的設置不起作用。 – mrki

+0

我並不是說它是一個無限循環。我的意思是說,每當你提出請求時,你都會被重定向,所以他們拒絕給你內容。 – elbear

回答

1

我加入這個重定向代碼到我的middleware.py文件,我加入到這個settings.py:

DOWNLOADER_MIDDLEWARES_BASERedirectMiddleware已經默認啓用的,你也沒有關係等什麼。

我想發送請求GET GET URL而不是被重定向。

怎麼樣?服務器根據您的GET請求迴應302。如果您再次在同一個網址上執行GET,您將再次被重定向。

你想達到什麼目的?

如果你想不被重定向,看到這些問題:

9

忘了中間件在這種情況下,這將這樣的伎倆:

meta = {'dont_redirect': True,'handle_httpstatus_list': [302]} 

這就是說,你將需要包括元參數,當你得到你的要求:

yield Request(item['link'],meta = { 
        'dont_redirect': True, 
        'handle_httpstatus_list': [302] 
       }, callback=self.your_callback) 
+0

沒有爲當前的Scrapy版本工作,我嘗試使用handle_httpstatus_list中的其他代碼(如404),並且工作正常。它只是不適用於301和302.任何想法? –

+0

@mrki如何hanlde手動重定向啓動url,意味着如果start_urls被重定向到其他地方? –

1

我使用HTTPCACHE_ENABLED = True時,有一個問題與重定向無限循環。我設法通過設置HTTPCACHE_IGNORE_HTTP_CODES = [301,302]來避免這個問題。