采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我们在运行 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
.conn.zcard(key_requests)
key_start_urls
":start_urls"
start_urls_len
.conn.llen(key_start_urls)
if
and
:
print
(
"爬虫处于等待状态 开始"
)
……执行代码……
"爬虫处于等待状态 结束"
end_time
datetime.datetime.now().strftime(SQL_DATETIME_FORMAT)
"采集开始时间:"
, spider.start_time)
"采集结束时间:"
, end_time)
首先在 spider 空闲的时候 执行该函数,然后在该函数里面读取 redis 服务器里面对应的 start_urls 和 requests 列表的长度,当 start_urls 和 requests 列表的长度等于 0 的时候 我就执行代码,如果不为 0 就不执行,不知道你说的 “用redis的命令判断request队列的长度”的代码是否是这样实现的呢?或者 说有别的更方便的实现方式呢?能否贴下参考代码???
这里我有个疑惑 为什么要让爬虫结束呢? 如果队列为空爬虫就会一直等着队列有数据就直接开始爬取, 这样不是很好么, 停止爬虫有什么好处呢
如果一定要爬虫停止可以修改一下源码中从request队列中取数据的逻辑修改为判断队列是否为空, 如果为空几秒再判断一下如果还是为空就直接退出爬虫就行了
我在下面写了一个扩展,用来判断 spider 是否处于空闲状态,但是这样我觉得还不够,我觉得应该继续判断 request 队列是否为空,但是 判断 request 队列是否为空的代码如何写呢?
判断为空很简单啊 直接使用redis的命令判断request队列的长度啊
我现在贴上自己写的代码,麻烦老师看看是否合理。谢谢。
登录后可查看更多问答,登录/注册
带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎
4.9k 30
2.6k 18
1.3k 18
1.5k 15
3.0k 15
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号