pyspider中文文档 删除任务怎么停止某个任务

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
PySipder 是一个 Python 爬虫程序
演示地址:**://demo.pyspider.org/
使用 Python 编写脚本,提供强大的 API
Python 2&3
强大的 WebUI 和脚本编辑器、任务监控和项目**和结果查看
支持 JavaScript 页面
后端系统支持:MySQL, MongoDB, SQLite, Postgresql
支持任务优先级、重试、定期抓取等
分布式架构
示例代码:
from pyspider.libs.base_handler import *
cl** Handler(BaseHandler):
crawl_config = {
@every(minutes=24 * 60)
def on_start(self):
self.crawl('**://scrapy.org/', callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a').**s():
self.crawl(each.attr.href, callback=self.detail_page)
def detail_page(self, response):
"url": response.url,
"title": response.doc('title').text(),
要回复问题请先或
浏览: 3198
关注: 0 人
知识价值的认可,源自您的赞赏
扫描二维码,你的支付将由imGeek代收后转给对方
感谢您的赞赏
一个开放、互助、协作、创意的社区
一个开放、互助、协作、创意的社区
京ICP备号-3pyspider脚本编写指南
时间: 18:06:12
&&&& 阅读:223
&&&& 评论:
&&&& 收藏:0
标签:注意,虽然在本文中会涉及调度策略等内容,但实际执行效果取决于具体策略实现。 project 脚本分为不同的 project,不同的 project 之间的任务互相独立,建议为不同的站点建立不同的 project project 属性
group – 分组标识,暂时仅用于区分
name – 脚本的名字,只允许 a-zA-Z0-9_
status – 任务状态,只有处于 DEBUG 和 RUNNING 状态任务才会被执行
TODO – 新建立的脚本所处的状态
STOP – 停止
CHECKING – 当任务在 DEBUG 或 RUNNING 状态被修改时,会自动变为 CHECKING,暂停任务执行
DEBUG – 任务可以开始执行,handler的 __env__[‘debug‘] == True
RUNNING – 任务正常执行状态
rate – 每秒抓取页面个数
burst – 并发数 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 时),会忽略新的请求,即使它们的参数不一致。
可以通过 force_update参数强制更新处于 active 状态的任务
当任务状态是 success 或 failed 时。参数 age 会检测 上次抓取时间 + age 是否大于当前时间,若大于,则会重启任务。或者,您可以通过设置 itag (例如前链中提取的更新时间)参数,当本次请求的 itag 与上次不同时,会重启任务。 script pyspider的脚本都是python环境的,没有做任何隔离,可以调用 host 机器环境中的任何 lib 和资源。
如果您担心安全问题,请使用 linux 的用户隔离机制隔离 processor 示例脚本: 执行环境 环境变量
__project__ == self.project 当前任务信息
self.project_name 当前脚本名
self.response 当前请求的response
self.task 当前请求的原始task信息
logging,logger 和 print的信息会被采集,请使用 logger 打印日志(默认 logging 已经 import 到环境中,请不要再次导入)
可以通过 projects 伪模块将其他 project 导入成 module,例如 from projects import some_project 脚本约束
接口请从 from libs.base_handler import * 中导入
脚本必须有至少一个的继承自 BaseHandler 的类
例外:当环境中有多个继承自 BaseHandler (例如:二次派生时),请指定 __class__ = Handler
每个 task 由参数 callback 指定的成员函数解析(默认的 callback 是 __call__)
完整的 callback 函数原型是:def foo(self, response, task) 您可以忽略您不需要的参数(但需要顺序一致)例如:foo(self, res)
response 是一个抓取结果的对象,完整 api 见下文
task 是原始的请求 json,和您在 调试器 左侧 绿色区域 看到的结果一致
默认 status_code 不为 200 的请求不会发给回调函数解析,请用 @catch_status_code_error 修饰回调函数,以捕获抓取异常。
on_start 是脚本执行的入口,当您在主页/上点击 Run 时,会触发 on_start 执行
函数的返回内容会被 on_result(self, result) 函数捕获,您可以在这里将其输出到数据库中 API接口 BaseHandler source:
特殊接口 def on_start(self):当在首页上点击 project 的 run 按钮时被调用 def on_result(self, result):所有 callback 函数 return 时被调用(包括返回值为 None 时)。默认的 on_result 回调会将结果发送给 result_work,默认的 result_work 会将结果储存到 resultdb 中。如果覆盖这个方法,会阻止默认行为。使用super(Handler, self).on_result(result) 调用父类方法以将结果发送给 result_worker。 def on_message(self, project, message):当收到其他 project 发送的消息时被调用,project 为发送消息的 project 的名字,message 可能为任意类型。使用 send_message发送消息。 module方法 @config(**kwargs)修饰回调函数,给 self.crawl 接口设定 function 级默认值 @every(minutes, seconds)修饰 on_cronjob 回调函数,每 minutes 分钟执行 @catch_status_code_error修饰回调函数,回调函数接受抓取异常数据。默认的 callback 会直接对非200返回直接抛出异常。 @not_send_status修饰回调函数,回调函数不发送状态包给 scheduler,不建议使用. 类成员变量 crawl_config:dict 给 self.crawl 接口设定 class 级默认值 方法 BaseHandler.crawl(url, **kwargs)参数列表,以下参数,除了 url 都是可选的。您可以使用 crawl_config 和/或 @config(_config:dict) 给类或方法设定默认值。但 直接调用的优先级 高于 方法级默认值 高于 类默认值。修改默认值不会影响已经创建了的任务。 基本
url – 需要抓取的url,支持url数组,支持dataurl:data:,content & 当有params参数存在时,最终url为拼接后的& 当url中有中文时,会进行 % 编码
taskid – 默认取 url 的 md5
callback – 回调函数,可以是 self.foo 也可以是函数的名字 "foo",默认 __call__
save – 传递给下一个请求的数据,可以是任何可 json 的对象
force_update – 强制修改队列中的任务信息(见上文) 调度
priority – 调度优先级,越高越好
retries – 重试次数
exetime – 执行时间,为 time.time() 的 timestamp
age – 页面有效期,在有效期内抓取过的页面不会重新抓取
itag – 能反映页面最后更新时间的标记,一般取自最后更新时间 抓取
method – POST/GET/HEAD 等
params – url中 ?a=b 的部分,类型 dict
data – POST正文的内容,string 或 dict & GET有data可能会导致抓取失败
files – 上传文件,{‘key‘: (‘file.name‘: ‘content‘)}
headers – 请球头,类型dict
cookies – 请求的 Cookies,类型 dict
timeout – 请求超时
allow_redirects – 是否跟随30x跳转,默认 True
proxy – 是否使用代理抓取,默认 True(需要 fetcher 支持)
etag – 是否启用etag(当页面无变化时不会抓取内容,也不会触发解析)
last_modifed – 是否启用last_modifed(当页面无变化时不会抓取内容,也不会触发解析) 使用JS渲染
fetch_type – 设置为 phantomjs或js时,调用 phantomjs 进行js渲染,加载 ajax 内容。需要安装 ,并为 fetcher 设置 phantomjs_proxy。
js_script – 设置一段 JS 脚本,在页面加载完成(前)时执行。进行模拟点击等动作。
js_run_at – document-start/document-end
load_images – 开启图片,默认关闭。 BaseHandler.send_message(project, msg, [url])向其他 project 发送 msg,对方脚本可以通过 on_message 回调获得消息。默认的 url 是固定的,在 on_message 中发往on_result 的数据会相互覆盖,使用 url 参数为每个结果设置不同的 URL地址(例如: Response source:
属性 Response.status_code请求返回的状态码 Response.url请求的url(当发生跳转时,为跳转后的url) Response.orig_url原请求的url Response.headers返回头 Response.cookies返回的cookies Response.error请求错误信息,string类型 Response.time请求用时 Response.ok请求是否成功 Response.encoding页面的编码,会根据header,content自动检测;当检测错误时,可以手动设定编码覆盖 Response.text页面经过转码成为 unicode 的数据 Response.content页面未转码内容 Response.save从上一个任务中传下来的数据 Response.json尝试解析 json Response.doc将页面建树,返回一个
对象(已将相对地址转为绝对地址 make_links_absolute ) 方法 Response.raise_for_status()尝试抛出抓取异常 FAQ 如何删除一个任务 将任务的 group 设置为 delete ,并将状态设置为 STOP,没有更新 24小时 之后,scheduler 会自动删除任务。 来源: &&标签:
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!辐射4无法完成任务怎么办 怎么随时取消任务_安游在线
最近有很多玩家反应在辐射4中有无法完成任务的BUG!而且这个任务还无法取消非常的烦人!那么遇到这种无法完成的任务BUG要怎么办呢?有玩家已经完美解决了这个BUG!下面给大家分享出来遇到这……
编辑:常常发布时间: 14:38
  最近有很多玩家反应在辐射4中有无法完成任务的BUG!而且这个任务还无法取消非常的烦人!那么遇到这种无法完成的任务BUG要怎么办呢?有玩家已经完美解决了这个BUG!下面给大家分享出来遇到这种事情的解决方法!
  无法完成任务BUG:
  如果你因为某些BUG导致任务无法完成,或者到达某地点先完成了任务,但后面又接到任务让你去调查该地点导致任务不消失,试试下面的方法。
  楼主在钻石城闲逛时点了悬赏海报,接了个任务。但后来与别人闲聊,又有任务告诉我去看看悬赏海报,但是我之前已经拿走了,这任务就一直存在无法完成。
  遇到BUG了。已经完成剑桥聚合物研究所的所有任务了,核糖酸动力甲胸甲也拿了。但是之后读了个小字条,在&其他&选项里多了一条任务,让我去剑桥聚合物研究所看看。
  后经楼主研究,找到了解决办法。
  1、控制台输入sqt
  然后出现许多Current quest:BosR02之类的代码。像我这个任务叫查看悬赏海报,代码是FFDiamondCityWantedPosterMisc
  2、再输入player.sqs 任务代码(如player.sqs FFDiamondCityWantedPosterMisc)
  产生下列代码
  Quest: FFDiamondCityWantedPosterMisc - Running - Current Stage: 10
  (done)  10      目前阶段
  (not set)  20     未进行
  (not set)  100
  3、接着输入setstage 任务代码 任务阶段(如setstage FFDiamondCityWantedPosterMisc 20)任务完成消失。
  任务代码介绍
  MQ(主线)
  Bos(钢铁兄弟会)
  RR(铁路)
  Min(义勇军)
  PS:按Page Up和Page Down翻页
推荐流派 Perk详解 常见问题 专题推荐 MOD推荐
6辐射4动力装甲排行榜 最强动力装相关文章推荐
首先pyspider all启动pyspider的所有服务,然后访问http://localhost:5000创建一个爬虫任务:taonvlang,点开任务链接编辑http://localhost:5...
From: /2652.html
From: /81109/
本文分析了来自pyspider源码构成,设计框架。
简介国人编写的强大的网络爬虫系统并自带强大的WebUI,采用Python语言编写吗,分布式架构。支持多种数据库后端
pyspider中文网站:/
1.为了能够将爬取到的数据存入本地数据库,现在本地创建一个mysql数据库example,然后
在数据库中建立一张表格test,示例如下:DROP TABLE IF EXISTS `test`;
本次主要是在Pyspider实例之抓取小米众筹产品的基础上修改的,
本来想直接在之前那篇文章修改的,但是感觉有点长了,所以决定另外写一篇。
闲话少说,直接进入正题:
1、在Pyspider的脚本...
1. 前言最近在玩爬虫, 使用最基本的urllib库来爬取静态网页的方法, 我们基本已经掌握了, 于是觉得应该整个框架玩玩, 于是看到了pyspider, 这是一个国内的大神写的一个框架, 非常好用,...
参考链接:/2443.html
1、安装pip
2、安装phantomjs
http://phantomjs.org/download.html
安装上传工具
1、上传工具
scrapyd-client
2、安装方法:
pip install scrapyd-client
3、上传方法:
python d:\Pyt...
本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对自己的开发工作中灵活运用带来启示。
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 pyspider 删除 的文章

 

随机推荐