返回信息流现在要遍历一个API接口,restapi.example.com/[0-9].*
客户端不知道服务器有多少接口数量,比如有100个,从第一个开始访问,当访问到101个不存在的接口时,服务器的后台设计为仍然返回response,其中json字段的内容为null
现在的问题是,scrapy默认的停止爬取好像是request队列里没有请求,那么这里的意思是不是scrapy遇到response状态码为404才不会继续爬取,break什么的好像也没用。
代码
page=1
starturl=[restapi.example.com/page]
def parse(self,response)
if(flag)
page=page+1
yield request(restapi.example.com/page,callback=parse())
else
break
这样写能实现爬到100个就停止吗?
这是一条镜像帖。来源:北邮人论坛 / python / #12055同步于 2016/1/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
求助,scrapy遍历时如何停止?
henceman
2016/1/24镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 jh1 的大作中提到: 】
: 全部代码?
大概逻辑是这么的,现在的结果出现了除了100页之内返回的数据正确后,scrapy停止不下来,会持续的爬取100页之后的数据
【 在 icybee 的大作中提到: 】
: 摸摸头,楼主问的并不能看懂,逃
scrapy为什么会停止呢?
当scrapy crawl spider_name的时候,也没有指定其停止呀?
scrapy是深度优先的吧,当爬取某网站树状资源时,也不知道其叶子节点是否存在呀?
大致知道楼主意思了,楼主其实你的需求根本不需要用scrapy做,scrapy默认一个异步框架,楼主可以这样,开始就一个url,page1,在page1的回调中先判断返回的json是否为空,如果不是就在url池中添加page2的请求,这样一来如果请求正常就会继续请求下一个页面,如果请求失败就不会继续了。
但是这样做就会把请求强行变成同步的,如果楼主很在意性能一定要异步的话可以使用一个全局变量存储第一个失败页面,往后每一次要把请求放进url池中时判断当前页面是否大于第一个失败页面
【 在 henceman 的大作中提到: 】
: scrapy为什么会停止呢?
: 当scrapy crawl spider_name的时候,也没有指定其停止呀?
: scrapy是深度优先的吧,当爬取某网站树状资源时,也不知道其叶子节点是否存在呀?
嗯,是比较在意性能,开始想着自己实现,开两个线程,每个都是异步回调,一个是http请求,一个是io,中间搞个缓冲区队列,基本上是个生产消费者,但实现起来发现各种问题,最主要是性能达不到
【 在 icybee 的大作中提到: 】
: 大致知道楼主意思了,楼主其实你的需求根本不需要用scrapy做,scrapy默认一个异步框架,楼主可以这样,开始就一个url,page1,在page1的回调中先判断返回的json是否为空
: .........