采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我们在运行 scrapy 的 spider 之后,然后在控制台输入 redis-cli 代码,scrapy 就开始抓取数据并保存到 redis数据库,当数据抓取完成之后,控制台一直处于等待状态,如何让Scrapy 在抓取完数据之后,自动结束,同时在结束之后调用其它Python代码呢?谢谢。
def post_news(self,spider): # print("当前蜘蛛的 redis_key :" , spider.redis_key) # print("当前蜘蛛的 name :" , spider.name) key_requests = spider.redis_key.split(":")[0] + ":requests" requests_len = self.conn.zcard(key_requests) key_start_urls = spider.redis_key.split(":")[0] + ":start_urls" start_urls_len = self.conn.llen(key_start_urls) if requests_len == 0 and start_urls_len == 0 : print("爬虫处于等待状态 开始") ……执行代码…… print("爬虫处于等待状态 结束") end_time = datetime.datetime.now().strftime(SQL_DATETIME_FORMAT) print("采集开始时间:", spider.start_time) print("采集结束时间:", end_time)
首先在 spider 空闲的时候 执行该函数,然后在该函数里面读取 redis 服务器里面对应的 start_urls 和 requests 列表的长度,当 start_urls 和 requests 列表的长度等于 0 的时候 我就执行代码,如果不为 0 就不执行,不知道你说的 “用redis的命令判断request队列的长度”的代码是否是这样实现的呢?或者 说有别的更方便的实现方式呢?能否贴下参考代码???
这里我有个疑惑 为什么要让爬虫结束呢? 如果队列为空爬虫就会一直等着队列有数据就直接开始爬取, 这样不是很好么, 停止爬虫有什么好处呢
如果一定要爬虫停止可以修改一下源码中从request队列中取数据的逻辑修改为判断队列是否为空, 如果为空几秒再判断一下如果还是为空就直接退出爬虫就行了
我在下面写了一个扩展,用来判断 spider 是否处于空闲状态,但是这样我觉得还不够,我觉得应该继续判断 request 队列是否为空,但是 判断 request 队列是否为空的代码如何写呢?
判断为空很简单啊 直接使用redis的命令判断request队列的长度啊
我现在贴上自己写的代码,麻烦老师看看是否合理。谢谢。
登录后可查看更多问答,登录/注册
带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎
4.8k 30
2.5k 18
1.1k 18
1.4k 15
2.8k 15