首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scrapy如何停止重定向(302)

scrapy如何停止重定向(302)
EN

Stack Overflow用户
提问于 2013-03-18 20:13:11
回答 4查看 25.6K关注 0票数 24

我正在尝试用Scrapy抓取一个url。但它会将我重定向到不存在的页面。

代码语言:javascript
运行
复制
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不存在,所以爬虫找不到它。我也爬行了许多其他网站,但在其他地方都没有这个问题。有什么方法可以阻止这个重定向吗?

任何帮助都将不胜感激。谢谢。

更新:这是我的爬行器类

代码语言:javascript
运行
复制
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
EN

回答 4

Stack Overflow用户

发布于 2013-03-18 21:20:26

是的,您只需添加像这样的元值即可完成此操作

代码语言:javascript
运行
复制
meta={'dont_redirect': True}

您还可以为特定的响应代码停止重定向,例如

代码语言:javascript
运行
复制
meta={'dont_redirect': True,"handle_httpstatus_list": [302]}

它将停止仅重定向302个响应代码。您可以添加任意数量的http状态代码,以避免重定向它们。

示例

代码语言:javascript
运行
复制
yield Request('some url',
    meta = {
        'dont_redirect': True,
        'handle_httpstatus_list': [302]
    },
    callback= self.some_call_back)
票数 20
EN

Stack Overflow用户

发布于 2015-01-15 02:28:43

在看了documentation和相关的源代码后,我能够弄清楚了。如果您查看start_requests的源代码,您将看到它为所有URL调用make_requests_from_url。

我没有修改start_requests,而是修改了make_requests_from_url

代码语言:javascript
运行
复制
def make_requests_from_url(self, url):
    return Request(url, dont_filter=True, meta = {
        'dont_redirect': True,
        'handle_httpstatus_list': [301, 302]
    })

并添加了这个作为我的蜘蛛的一部分,就在parse()之上。

票数 11
EN

Stack Overflow用户

发布于 2013-04-23 11:23:51

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

参见documentation

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15476587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档