scrapy-如何停止重定向(302)(scrapy- how to stop Redirect (

2019-07-21 21:08发布

我试图抓取使用Scrapy的URL。 但它重定向我不存在页。

Redirecting (302) to <GET http://www.shop.inonit.in/mobile/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/1275197> from <GET http://www.shop.inonit.in/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/pid-1275197.aspx>

问题是http://www.shop.inonit.in/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/pid-1275197.aspx存在但http://www.shop.inonit.in/mobile/Products/Inonit-Home-Decor--Knick-Knacks-Cushions/Shor-Sharaba/Andaz-Apna-Apna-Cushion-Cover/1275197没有,所以爬虫无法找到这一点。 我爬到许多其他网站很好,但没有这个问题的其他地方。 有没有办法可以阻止这种重定向?

任何帮助将非常感激。 谢谢。

更新:这是我的蜘蛛类

class Inon_Spider(BaseSpider):
name = 'Inon'
allowed_domains = ['www.shop.inonit.in']

start_urls = ['http://www.shop.inonit.in/Products/Inonit-Gadget-Accessories-Mobile-Covers/-The-Red-Tag/Samsung-Note-2-Dead-Mau/pid-2656465.aspx']

def parse(self, response):

    item = DealspiderItem()
    hxs = HtmlXPathSelector(response)

    title = hxs.select('//div[@class="aboutproduct"]/div[@class="container9"]/div[@class="ctl_aboutbrand"]/h1/text()').extract()
    price = hxs.select('//span[@id="ctl00_ContentPlaceHolder1_Price_ctl00_spnWebPrice"]/span[@class="offer"]/span[@id="ctl00_ContentPlaceHolder1_Price_ctl00_lblOfferPrice"]/text()').extract()
    prc = price[0].replace("Rs.  ","")
    description = []

    item['price'] = prc
    item['title'] = title
    item['description'] = description
    item['url'] = response.url

    return item

Answer 1:

是的,你可以简单地通过添加元值像这样做

meta={'dont_redirect': True}

也可以停止重定向特定响应代码像

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

它将停止重定向仅302响应代码。

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


Answer 2:

默认情况下,Scrapy使用RedirectMiddleware来处理重定向。 您可以设置REDIRECT_ENABLED为False禁用重定向。

见文档 。



Answer 3:

看后的文档 ,并通过相关的源看,我能弄明白。 如果您在源start_requests看,你会看到它的所有URL调用make_requests_from_url。

而不是修改start_requests的,我修改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]
            })

,并将此作为我的蜘蛛的一部分,正上方parse()



Answer 4:

由于这里解释: Scrapy文档

使用Request元

request =  scrapy.Request( link.url, callback=self.parse2)
request.meta['dont_redirect'] = True
yield request


文章来源: scrapy- how to stop Redirect (302)