Scrapyd使用详解

目录 前言使用详解 安装启动项目发布相关API使用 查看服务进程状态项目发布版本调度爬虫取消任务获取上传的项目获取项目的版本获取项目的爬虫列表获取任务列表(Scrapyd 0.15版本以上)删除项目版本删除项目前言Scrapyd通常作为守护进程运行,它侦听运行爬虫的请求,并为每个请求生成一个进程,该进程基本上执行:scrapy crawl [myspider]。 Scrapyd还并行运行多个进程,将它们分配到max_proc和max_proc_per_cpu选项提供的固定数量的插槽中,启动尽可能多的进程来处理负载。 除了调度和管理进程之外,Scrapyd还提供了一个JSON web服务来上载新的项目版本(作为egg)和调度爬虫。 Scrapyd官方文档 https://scrapyd.readthedocs.i...划重点:通过api方式多进程执行请求,在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务。 使用详解安装pip install scrapyd依赖的库及版本: Python 2.7 or aboveTwisted 8.0 or aboveScrapy 1.0 or abovesix启动在项目目录下,输入scrapyd即可运行,默认地址为http://localhost:6800 scrapyd官方详细配置文档说明:https://scrapyd.readthedocs.i...修改默认配置信息可以在项目下新建一个scrapyd.conf或者在scrapy.cfg中增加[scrapyd]: [scrapyd]# 网页和Json服务监听的IP地址,默认为127.0.0.1bind_address = 127.0.0.1# 监听的端口,默认为6800http_port = 6800# 是否打开debug模式,默认为offdebug = off# 每个CPU可启用的Scrapy 进程数,默认为4max_proc_per_cpu = 4# 可启用的最多进程数,默认为0.如果未设置或者设为0,则使用的最多进程数=CPU数量*max_proc_per_cpumax_proc = 0# 项目eggs生成目录,默认为项目目录下eggseggs_dir = eggs# 项目日志生成目录,默认为项目目录下logs,如果不想要生成日志,可以直接设置成空logs_dir = logsitems_dir =# 项目dbs生成目录,默认为项目目录下dbsdbs_dir = dbs# 爬取的items存储的文件夹(版本0.15.以上),默认为空,不存储。items_dir =# 每个爬虫保持的完成任务数,默认为5.(版本0.15.以上,以前版本中为logs_to_keep)jobs_to_keep = 5# 保持的完成任务进程数。默认为100.(版本0.14.以上)finished_to_keep = 100# 轮训请求队列的时间间隔。默认为5s,可以为浮点数poll_interval = 5.0# 启动子进程的模块。可以使用自定义runner = scrapyd.runner# 返回可用于twisted的application,可继承于Scrapyd添加和移除自己的组件和服务。 https://twistedmatrix.com/documents/current/core/howto/application.html查看更多application = scrapyd.app.applicationlauncher = scrapyd.launcher.Launcher# twisted的web资源,表示到scrapyd的接口。Scrapyd包含一个带有网站的界面,可以提供对应用程序的web资源的简单监视和访问。此设置必须提供twisted web资源的根类。webroot = scrapyd.website.Root项目发布部署主要分为两步: ...

September 10, 2019 · 1 min · jiezi

时隔五年Scrapyd-终于原生支持-basic-auth

Issue in 2014scrapy/scrapyd/issues/43 Pull request in 2019scrapy/scrapyd/pull/326 试用安装:pip install -U git+https://github.com/my8100/scrapyd.git@add_basic_auth更新配置文件 scrapyd.conf,其余配置项详见官方文档[scrapyd]username = yourusernamepassword = yourpassword启动:scrapydIn [1]: import requestsIn [2]: requests.get('http://127.0.0.1:6800/').status_codeOut[2]: 401In [3]: requests.get('http://127.0.0.1:6800/', auth=('admin', 'admin')).status_codeOut[3]: 401In [4]: requests.get('http://127.0.0.1:6800/', auth=('yourusername', 'yourpassword')).status_codeOut[4]: 200由于 Scrapyd 的 GitHub 最新提交已经重构了 Jobs 页面,如果正在使用 ScrapydWeb 管理 Scrapyd,则需同步更新 ScrapydWeb:pip install -U git+https://github.com/my8100/scrapydweb.gitGitHubmy8100/scrapyd

May 9, 2019 · 1 min · jiezi

如何免费创建云端爬虫集群

移步 GitHub

April 4, 2019 · 1 min · jiezi

LogParser v0.8.0 发布:一个用于定期增量式解析 Scrapy 爬虫日志的 Python 库

GitHub 开源my8100 / logparser安装通过 pip:pip install logparser通过 git:git clone https://github.com/my8100/logparser.gitcd logparserpython setup.py install使用方法作为 service 运行请先确保当前主机已经安装和启动 Scrapyd通过命令 logparser 启动 LogParser访问 http://127.0.0.1:6800/logs/stats.json (假设 Scrapyd 运行于端口 6800)访问 http://127.0.0.1:6800/logs/projectname/spidername/jobid.json 以获取某个爬虫任务的日志分析详情配合 ScrapydWeb 实现爬虫进度可视化详见 my8100 / scrapydweb在 Python 代码中使用In [1]: from logparser import parseIn [2]: log = “““2018-10-23 18:28:34 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: demo) …: 2018-10-23 18:29:41 [scrapy.statscollectors] INFO: Dumping Scrapy stats: …: {‘downloader/exception_count’: 3, …: ‘downloader/exception_type_count/twisted.internet.error.TCPTimedOutError’: 3, …: ‘downloader/request_bytes’: 1336, …: ‘downloader/request_count’: 7, …: ‘downloader/request_method_count/GET’: 7, …: ‘downloader/response_bytes’: 1669, …: ‘downloader/response_count’: 4, …: ‘downloader/response_status_count/200’: 2, …: ‘downloader/response_status_count/302’: 1, …: ‘downloader/response_status_count/404’: 1, …: ‘dupefilter/filtered’: 1, …: ‘finish_reason’: ‘finished’, …: ‘finish_time’: datetime.datetime(2018, 10, 23, 10, 29, 41, 174719), …: ‘httperror/response_ignored_count’: 1, …: ‘httperror/response_ignored_status_count/404’: 1, …: ‘item_scraped_count’: 2, …: ’log_count/CRITICAL’: 5, …: ’log_count/DEBUG’: 14, …: ’log_count/ERROR’: 5, …: ’log_count/INFO’: 75, …: ’log_count/WARNING’: 3, …: ‘offsite/domains’: 1, …: ‘offsite/filtered’: 1, …: ‘request_depth_max’: 1, …: ‘response_received_count’: 3, …: ‘retry/count’: 2, …: ‘retry/max_reached’: 1, …: ‘retry/reason_count/twisted.internet.error.TCPTimedOutError’: 2, …: ‘scheduler/dequeued’: 7, …: ‘scheduler/dequeued/memory’: 7, …: ‘scheduler/enqueued’: 7, …: ‘scheduler/enqueued/memory’: 7, …: ‘start_time’: datetime.datetime(2018, 10, 23, 10, 28, 35, 70938)} …: 2018-10-23 18:29:42 [scrapy.core.engine] INFO: Spider closed (finished)“““In [3]: d = parse(log, headlines=1, taillines=1)In [4]: dOut[4]:OrderedDict([(‘head’, ‘2018-10-23 18:28:34 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: demo)’), (’tail’, ‘2018-10-23 18:29:42 [scrapy.core.engine] INFO: Spider closed (finished)’), (‘first_log_time’, ‘2018-10-23 18:28:34’), (’latest_log_time’, ‘2018-10-23 18:29:42’), (’elapsed’, ‘0:01:08’), (‘first_log_timestamp’, 1540290514), (’latest_log_timestamp’, 1540290582), (‘datas’, []), (‘pages’, 3), (‘items’, 2), (’latest_matches’, {‘resuming_crawl’: ‘’, ’latest_offsite’: ‘’, ’latest_duplicate’: ‘’, ’latest_crawl’: ‘’, ’latest_scrape’: ‘’, ’latest_item’: ‘’, ’latest_stat’: ‘’}), (’latest_crawl_timestamp’, 0), (’latest_scrape_timestamp’, 0), (’log_categories’, {‘critical_logs’: {‘count’: 5, ‘details’: []}, ’error_logs’: {‘count’: 5, ‘details’: []}, ‘warning_logs’: {‘count’: 3, ‘details’: []}, ‘redirect_logs’: {‘count’: 1, ‘details’: []}, ‘retry_logs’: {‘count’: 2, ‘details’: []}, ‘ignore_logs’: {‘count’: 1, ‘details’: []}}), (‘shutdown_reason’, ‘N/A’), (‘finish_reason’, ‘finished’), (’last_update_timestamp’, 1547559048), (’last_update_time’, ‘2019-01-15 21:30:48’)])In [5]: d[’elapsed’]Out[5]: ‘0:01:08’In [6]: d[‘pages’]Out[6]: 3In [7]: d[‘items’]Out[7]: 2In [8]: d[‘finish_reason’]Out[8]: ‘finished’ ...

January 24, 2019 · 2 min · jiezi