Scrapinghub HubStorage的客户端接口
项目描述
[警告] 此软件包已弃用,请使用 python-scrapinghub (>=1.9.0) 代替。
概述
此Python库可以通过 storage.scrapinghub.com 端点与蜘蛛、作业和抓取数据进行交互,请参阅 Scrapinghub API。
需求
requests: http://pypi.python.org/pypi/requests
测试
运行测试需要hubstorage后端运行,以及python responses 库(见 requirements-test.txt)。
用法
首先,使用您的API密钥进行授权
>>> from hubstorage import HubstorageClient >>> hс = HubstorageClient(auth='apikey') >>> hc.server_timestamp() 1446222762611
项目
获取项目设置或工作摘要
>>> project = hc.get_project('1111111') >>> project.settings['botgroups'] [u'botgroup1', ] >>> project.jobsummary() {u'finished': 6, u'has_capacity': True, u'pending': 0, u'project': 1111111, u'running': 0}
蜘蛛
获取与其名称相关联的蜘蛛ID
>>> project.ids.spider('foo') 1
查看最后的工作摘要
>>> summaries = project.spiders.lastjobsummary(count=3)
获取每个蜘蛛的工作摘要
>>> summary = project.spiders.lastjobsummary(spiderid='1')
工作
可以直接通过id(project_id/spider_id/job_id)检索工作
>>> job = hc.get_job('1111111/1/1') >>> job.key '1111111/1/1' >>> job.metadata['state'] u'finished'
创建新的工作需要蜘蛛名称
>>> job = hc.push_job(projectid='1111111', spidername='foo') >>> job.key '1111111/1/1'
优先级可以是0到4(从低到高),默认为2。
以最高优先级从项目级别推送工作
>>> job = project.push_job(spidername='foo', priority=4) >>> job.metadata['priority'] 4
推送带蜘蛛参数的工作
>>> project.push_job(spidername='foo', spider_args={'arg1': 'foo', 'arg2': 'bar'})
正在运行的工作可以通过调用request_cancel()取消
>>> job.request_cancel() >>> job.metadata['cancelled_by'] u'John'
要删除工作
>>> job.purged() >>> job.metadata['state'] u'deleted'
工作详情
工作详情可以在工作元数据和scrapystats中找到
>>> job = hc.get_job('1111111/1/1') >>> job.metadata['version'] u'5123a86-master' >>> job.metadata['scrapystats'] ... u'downloader/response_count': 104, u'downloader/response_status_count/200': 104, u'finish_reason': u'finished', u'finish_time': 1447160494937, u'item_scraped_count': 50, u'log_count/DEBUG': 157, u'log_count/INFO': 1365, u'log_count/WARNING': 3, u'memusage/max': 182988800, u'memusage/startup': 62439424, ...
可以在元数据中存储任何内容,以下是如何添加标签的示例
>>> job.update_metadata({'tags': 'obsolete'})
工作
遍历每个项目的所有工作元数据(降序排列)
>>> jobs_metadata = project.jobq.list() >>> [j['key'] for j in jobs_metadata] ['1111111/1/3', '1111111/1/2', '1111111/1/1']
Jobq元数据字段集不如job.metadata详细,但也包含一些新字段。可以通过使用jobmeta参数请求附加字段。如果使用,则由用户列出所有所需的字段,因此除了请求的字段外,只会添加少量默认字段。
>>> metadata = next(project.jobq.list()) >>> metadata.get('spider', 'missing') u'foo' >>> jobs_metadata = project.jobq.list(jobmeta=['scheduled_by', ]) >>> metadata = next(jobs_metadata) >>> metadata.get('scheduled_by', 'missing') u'John' >>> metadata.get('spider', 'missing') missing
默认情况下,jobq.list()返回最后1000个结果的最大值。使用start参数可以启用分页
>>> jobs_metadata = project.jobq.list(start=1000)
有几个过滤器,如蜘蛛、状态、has_tag、lacks_tag、startts和endts。要获取按标签筛选的工作
>>> jobs_metadata = project.jobq.list(has_tag=['new', 'verified'], lacks_tag='obsolete')
标签列表具有OR功能,因此在上面的情况下,预期具有‘new’或‘verified’标签的工作。
要获取某些蜘蛛的最后完成的工作的特定数量
>>> jobs_metadata = project.jobq.list(spider='foo', state='finished' count=3)
有4种可能的作业状态,可以用作按状态筛选的值
挂起
运行中
完成
已删除
物品
遍历项目
>>> items = job.items.iter_values() >>> for item in items: # do something, item is just a dict
日志
遍历例如前10个日志
>>> logs = job.logs.iter_values(count=10) >>> for log in logs: # do something, log is a dict with log level, message and time keys
集合
让我们为foo蜘蛛存储哈希和时间戳对。使用Collections的常规工作流程将是
>>> collections = project.collections >>> foo_store = collections.new_store('foo_store') >>> foo_store.set({'_key': '002d050ee3ff6192dcbecc4e4b4457d7', 'value': '1447221694537'}) >>> foo_store.count() 1 >>> foo_store.get('002d050ee3ff6192dcbecc4e4b4457d7') '1447221694537' >>> for result in foo_store.iter_values(): # do something with _key & value pair >>> foo_store.delete('002d050ee3ff6192dcbecc4e4b4457d7') >>> foo_store.count() 0
前沿
使用Frontier的典型工作流程
>>> frontier = project.frontier
向前沿添加请求
>>> frontier.add('test', 'example.com', [{'fp': '/some/path.html'}]) >>> frontier.flush() >>> frontier.newcount 1
添加带额外参数的请求
>>> frontier.add('test', 'example.com', [{'fp': '/'}, {'fp': 'page1.html', 'p': 1, 'qdata': {'depth': 1}}]) >>> frontier.flush() >>> frontier.newcount 2
要从前沿删除example.com槽位
>>> frontier.delete_slot('test', 'example.com')
要检索给定槽位的请求
>>> reqs = frontier.read('test', 'example.com')
要删除请求批次
>>> frontier.delete('test', 'example.com', '00013967d8af7b0001')
要检索给定槽位的指纹
>>> fps = [req['requests'] for req in frontier.read('test', 'example.com')]
项目详情
下载文件
下载适合您的平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分发
构建版本
hubstorage-0.23.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ed9d10ae949cc282f4e5bc776c9c4890e373aa4f29fa983cfc5845b932a5bcbf |
|
MD5 | 040cee27ef7f10de746a7bf7e63bbf4a |
|
BLAKE2b-256 | 5228881a645d9d549aa077ae4b5548416d5809dbe076d915d44d898c20ea7c24 |
hubstorage-0.23.6-py2-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d638143206038e54a2de74c2c1ecf1bf84dff344ac2ef3d9cb63a98e315a8f2d |
|
MD5 | 09539b2da1c75216fd8478fcf9a89890 |
|
BLAKE2b-256 | 81ad6482a708db00cd5871e3e9a24285738e7bce4e401301074b3f2fe09dce74 |