关于 使用scrapyd 控制scrapy 达到兼顾 定时及 实时 抓取数据

____公司项目 需要 实时 查询 一些数据,所以 决定使用 scrapy 框架 搭一个爬虫服务接口,

____因为具体业务需要,决定既要支持 实时 的调用并返回 查询结果,也要定时自动去爬取 定向url数据 存到本地数据库中,

即 在以后的查询中,会先去 本地数据库中读取 信息,当没有时再去 抓取,并返回。

思路:

____网上查了半天,scrapy开发很多教程,但关于 管理scrapy服务的却不多,github上有几个开源框架但感觉 更麻烦,还查到 scrapy 内置的web-service却也是一脸茫然,

____最后试了试 scrapyd 感觉还行,所以决定 以后 决定 在scrapyd 外层 包一个处理逻辑,接收java 发来的请求 并 去查询本地库,当没有本地数据,就开启新的爬取任务,并隔一段时间 向scrapyd服务 查询 任务抓取是否 finished 当finished 就 将数据(被爬虫任务 抓取而来,并存到了数据库中)打包返回给 调用者。

开发进程:

____总共有两部分要写,一是 具体的sprider的逻辑,二是 与scrapyd 交互的部分。

之所以这样可以是因为:

1.没找到 简单的类似 ajax 式的在sprider里直接调用并返回爬取结果;

2. scrapyd 支持 携参的 http 请求 ,包括 启动/取消 任务,以及查询任务状态 ;

3.scrapy框架 对于初涉 爬虫来说  既 简单 又 强大。

js 控制部分 https://github.com/lixdJM/scrapyJsCtrl

关于 scrapyd 与 scrapy 的使用 网上则有比较直接的 教程。

2018.1.5 

调试中 发现 会很慢~ 一般在 5 ~ 6 s,简单分析的话 时间浪费在几个节点上:

1.每次 查询都要重新开启一个job 这就回提前浪费 3~4s

2.未对session 进行 缓存 每次请求都是一个新的从登陆开始的请求所以费时。

3.数据库链接池 每次都是 重新 打开 再 关闭~

也就是说 ,集中的查询的时候 尤其是 连续查询 的话 ,简单的对 1 进行进行优化即可,当然 能对 2 优化则更好。

而且2的优化能使得 在session未失效之前都能 直接查询 。

而3的话 对于不是 爬取而是简单 查询接口的话 应该影响不大。等 写定时爬虫的时候再说

其实,这一部分本来是要单独成一个 模块的,或者还是用python写然后用django混合scrapy,在django里 控制 这一切,

慢慢再转过去~毕竟仅仅是 开发个接口嘛,对调用者来说都一样。


你可能感兴趣的:(爬虫)