python爬虫<解决URL被重定向无法抓取到数据问题>

在写爱奇艺爬虫的时候经常碰到URL被重定向的问题,导致无法请求到数据:

以下是我的代码:

# -*- coding: utf-8 -*-

import scrapy

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
}
import re


class URLredirect(scrapy.Spider):
    name = 'urlredirect_spider'

    def start_requests(self):
        reqs = []
        url = 'http://www.iqiyi.com/v_19rrk4vf0k.html'
        req = scrapy.Request(url, headers=headers, meta={'url': url})
        reqs.append(req)
        return reqs

    def parse(self, response):
        responseURL = response.url
        requestURL = response.meta['url']
        print '''Response's URL: ''', response.url
        print '''Request's  URL: ''', response.meta['url']
        if str(responseURL).__eq__(requestURL):
            print re.compile('<title>(.*?)</title>').findall(response.body)[0].decode('utf-8')
        else:
            print '--------------------->>>>>>>>Your request is redirect,retrying.....<<<<<-------------------------'
            yield scrapy.Request(url=requestURL, headers=headers, meta={'url': requestURL}, callback=self.parse)

大致意思就是判断如果没被重定向就解析网页,如果被重定向了就重新请求,以下是执行的结果:

这里写图片描述

解决的办法是在Request中将scrapy的dont_filter=True,因为scrapy是默认过滤掉重复的请求URL

这里写图片描述

添加上参数之后即使被重定向了也能请求到正常的数据了
这里写图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值