scrapy爬取一定数量页面后停止

总结scrapy异常停止的原因

说实话,我非常不喜欢scrapy这种框架,像一篇博客说的,高不成低不就。但是,scrapy有它的可取之处,不然怎么成为最流行的爬虫框架呢。

scrapy经常遇到的问题是,爬虫刚开始就结束或者爬了一些页面结束,甚至有时候就一直输出日志, 0 pages/min什么的。这种情况一般有下面几种原因:

  1. scrapy等待redis或者redis里没有url可爬了
  2. 去重设置过滤了url
  3. 爬虫逻辑有问题,死循环或者错误循环,或者xpath有问题不能获取下一页url

基本上这三种原因是爬虫异常停止的罪魁祸首。

scrapy 302重定向解决方法

解决了scrapy 302重定向拿不到数据的问题

今天在写京东爬虫遇到了重定向问题,加了headers(ua也加了)还是不解决问题。每个网站的问题都不同,像拉钩,BOSS直聘可能对referer有要求,而京东即使加了referer也无济于事。暂时的解决办法是:

  • 在Scrapy中的Request中添加 dont_filter=True ,因为Scrapy是默认过滤掉重复的请求URL,添加上参数之后即使被重定向了也能请求到正常的数据了。
  • 在Scrapy框架中的 settings.py文件里添加
HTTPERROR_ALLOWED_CODES = [301]

参考:https://www.pythonf.cn/read/154169

这个其实并没有真正解决问题,302重定向还是存在,只不过重试拿到了数据,代价就是每个请求都要两次才能拿到数据。我估计加上cookie有可能解决问题,但是加cookie可能会带来更多问题。