pyspider脚本编写指南

project

脚本分为不同的 project,不同的 project 之间的任务互相独立,建议为不同的站点建立不同的 project

project 属性

group – 分组标识,暂时仅用于区分
name – 脚本的名字,只允许 a-zA-Z0-9_
status – 任务状态,只有处于 DEBUG 和 RUNNING 状态任务才会被执行
rate – 每秒抓取页面个数
burst – 并发数
status – 任务状态
	TODO – 新建立的脚本所处的状态
	STOP – 停止
	CHECKING – 当任务在 DEBUG 或 RUNNING 状态被修改时,会自动变为 CHECKING,暂停任务执行
	DEBUG – 任务可以开始执行,handler的 __env__[‘debug’] == True
	RUNNING – 任务正常执行状态

task

任务是 spider 调度的最小单位。

taskid 是任务的唯一区分标识,默认使用 url 的 md5 作为 taskid(即根据 url 对抓取去重)

不同 project 间任务相互独立(不同 project 间 taskid 可以相同)

任务状态

active(1) – 活动状态,表示任务在队列中等待被抓取(包括在队列中、抓取中、执行时间未到、重试中)

success(2) – 抓取成功状态

failed(3) – 经过重试后抓取失败

bad(4) – 损坏,暂未使用

任务调度

只有处于 active 状态的任务才会得到调度,scheduler 对于每个 project 有两个队列:

时间队列 – 任务尚未到达执行时间,时间拉长重试也在这个队列中

优先队列 – 任务已经到达执行时间,任务会根据优先级 priority ,在有流量配额情况下,依次发起调度

scheduler 会等待每一个调度任务返回,当执行失败时,会根据 retries 参数,拉长一定时间发起重试。当超时结果未返回时,会无限次地重新发起调度

新/旧任务请求
当产生一个库中没有的任务请求时,会根据参数 exetime 中设定的执行时间决定是放入 时间队列 还是 优先队列。

当新请求已经在队列中(即任务状态是 active 时),会忽略新的请求,即使它们的参数不一致。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值