HTTPERROR_ALLOWED_CODES = [302]
这个表示允许302的错误而不处理。
这几种方式可能对你有用,因为不同的环境原因不同,我之所以将其归到“错误”,是因为我曾经遇到了一个301问题,因为我用了旧的http://,而新的为https://,试过了上面几种方式都不能解决。
也因为如此,将这些可能的原因及解决办法汇总,供后来者参考。
Scrapy的301、302重定向问题原因及解决办法根据 HTTP标准 ,返回值为200-300之间的值为成功的response。Scrapy运行爬虫过程中,目标网站返回301或302,而没有获取到想要的网页内容,表示请求失败。eg:2019-02-13 17:18:32 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:60232019-02-13 17:18:33 [scrapy.downloaderm
在爬虫的获取数据上,一直在讲一些爬取的方法,想必小伙伴们也学习了不少。在学习的过程中遇到了问题,大家也会一起交流解决,找出不懂和出错的地方。今天小编想就爬虫采集数据时遇到的问题进行一个整理,以及在遇到不同的问题时,我们应该想的是什么样的解决思路,具体内容如下分享给大家。
1、需要带着cookie信息访问
比如大多数的社交化软件,基本上都是需要用户登录之后,才能看到有价值的东西,其实很简单,我们可以使用Python提供的cookielib模块,实现每次访问都带着源网站给的cookie信息去访问,这样只要我们成功模拟了登录,爬虫处于登录状态,那么我们就可以采集到登录用户看到的一切信息了。下面是使用
上一篇文章中使用nodejs程序解析了网页编码为gbk,gb2312,以及utf-8的情况,这里面有三种特殊的乱码情况需要单独的说明一下.
1,网页编码为utf-8,但是解析为乱码,代表网站为www.guoguo-app.com。
这个问题真是个逗逼问题,查看网页源码中给出的编码方式为utf8,如下:
<meta charset=UTF-8>
<title>查快递</title>
由于解析出来的始终是乱码,我就抓包看了下,报文中的编码方式为gbk,果然我使用gbk的方式之后,得到的不再是乱码了。淘宝为了反爬虫也是操碎了新,但是我也很好奇这种方式是怎么实现的,知道的告诉我。
GET /
在使用Scrapy框架中URl被重定向,总是遇到这类问题:
DEBUG: Redirecting (301/302) to <GET https://XXXX refer https://XXXX>
解决方式:
在Scrapy中的Request中添加 dont_filter=True,因为Scrapy是默认过滤掉重复的请求URL,添加上参数之后即使被重定向了也能请求到正常的数据了。
在Scrapy框架中的 settings.py文件里添加
HTTPERROR_ALLOWED_COD
在使用scrapy爬取网站数据的时候遇到了302重定向问题,可以在Request中添加meta参数。
yield scrapy.Request(url, callback=self.parse, meta={'dont_redirect': True, 'handle_httpstatus_list': [302]})
'dont_redirect’是禁止重定向。
'handle_httpstatus_list’是scrapy可以处理的响应状态码。
因为scrapy默认只能处理状态码在200-300之间的响
1.什么是状态码301,302
301 Moved Permanently(永久重定向) 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。比如百度百科:http://baike.baidu.com/fenlei/%E6%94%BF%E6%B2%BB%E4%BA%BA%E7%89%A9
解决(一)
1.在Request中将scrapy的dont...
今天,在采集数据的时候,目标网站一直返回301,百思不得其解,在网上也找了好多的解决办法,大多不靠谱,经过分析后,问题终于解决了,
目标网站返回301的原因肯定是,爬虫伪装的不够好,被服务器识别出是爬虫,所以直接返回了301后者是404,403等状态码。
解决办法是:通过f12分析,得到浏览器访问网站是带的一些参数,如下图:
可以一个一个的试验,看到底是那几个参数是关键参数,一般来说肯定...
记录一下我爬虫遇到的一个简单问题,为了不试爬虫过多的出现转向问题,我加了一个allow_redirects=False,默认它是为True的,后来跑着跑着就出现301的问,偶然测试我把allow_redirects=False去掉,就出现响应码正常了。为了防止跳转问题,每次运行完,我把resp.close(),手动关闭连接。
resp = requests.get(url=url, headers...