Scrapy爬虫遇见重定向301/302问题解决方法

Scrapy中止重定向

在scrapy爬取数据时,遇到重定向301/302,特别是爬取一个下载链接时,他会直接重定向并开始下载,在下载之后才会返回爬取的链接,这时候就需要中止重定
以下302都可以换成301,是一样的

中止重定向

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

如果爬取是在parse中以yield Request爬取,那么需要添加过滤 dont_filter=True,详情可见下述情景二

取到response中Location值

重定向后的链接会放在response里header中的Location,这里说明一下如何取到其中的值

location = response.headers.get("Location")

情景一

如果爬取网址是在start_urls中顺序爬取执行,直接在start_requests方法中添加就行

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

完整例子

import scrapy


class xxSpider(scrapy.Spider):
    name = 'xx'
    allowed_domains = ['www.xxx.com']   
    start_urls = ['http://www.xxx.com/download']
	
	def start_requests(self):
		# 在此直接中止302重定向即可
		yield Request(start_urls[0], 
					  meta={
						 'dont_redirect': True,
						 'handle_httpstatus_list': [302]
						}, 
					  callback=self.parse)   


    def parse(self, response):
    	# 取得返回的重定向值
        location = response.headers.get("Location")

情景二

如果爬取是在parse中以yield Request爬取,那么需要添加过滤dont_filter=True

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

完整例子

import scrapy


class xxSpider(scrapy.Spider):
    name = 'xx'
    allowed_domains = ['www.xxx.com']   
    start_urls = ['http://www.xxx.com/download']

    def parse(self, response):
    	url = "xxxxxxxxxx"
		# 在此需要添加过滤
		yield Request(url, 
              meta={
                  'dont_redirect': True,
                  'handle_httpstatus_list': [302]
              },
              callback=self.parse,dont_filter=True)   
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张三是个好人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值