scrapy- how to stop Redirect (302)

为君一笑 提交于 2019-11-28 18:50:46

yes you can do this simply by adding meta values like

meta={'dont_redirect': True}

also you can stop redirected for a particular response code like

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

it will stop redirecting only 302 response codes.

example

        yield Request('some url',
                  meta = {
                      'dont_redirect': True,
                      'handle_httpstatus_list': [302]
                  },
                  callback= self.some_call_back)
imwilsonxu

By default, Scrapy use RedirectMiddleware to handle redirection. You can set REDIRECT_ENABLED to False to disable redirection.

See documentation.

After looking at the documentation and looking through the relevant source, I was able to figure it out. If you look in the source for start_requests, you'll see that it calls make_requests_from_url for all URLs.

Instead of modifying start_requests, I modified make_requests_from_url

    def make_requests_from_url(self, url):
        return Request(url, dont_filter=True, meta = {
                  'dont_redirect': True,
                  'handle_httpstatus_list': [301,302]
            })

And added this as part of my spider, right above parse().

As explained here: Scrapy docs

Use Request Meta

request =  scrapy.Request( link.url, callback=self.parse2)
request.meta['dont_redirect'] = True
yield request
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!