scrapy 如何在多个模块里共用一个数据库连接池
整体流程大概是:
spider.start_requests 从 redis 的 tasks_keys 里获取 url
middleware.proxyMiddleware.process_request 从 redis 的 proxy_keys 里获取代理
spider.parse 解析出 item,需深度抓取的 url,深度抓取 url 放入 redis 的 tasks_keys 里
pipelines.MyItem 把解析出的 item 存入 redis 的 item_keys 里面
。。。。
总结来说,有 4 个地方需要用到同一个 redis 数据库,区别只在 key
目前的写法是,
middleware.proxyMiddleware 里面__init__声明了 redis.ConnectionPool 连接池,以及 redis.StrictRedis 连接
在 pipelines.MyItem 和 spider 继承的类__init__里面全部粘贴复制了一遍。。。
一模一样的代码写了三个地方
虽然程序可以正常跑,但是,这方法越看越觉得傻
有什么方法可以只声明一个 redis 链接,然后在 spider 、middleware 、pipeline 复用同一个链接吗?
搜了一圈,各种出错,没有实际进展