请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Scrapy-Redis爬虫启动后,是如何做到进程不Close的

老师,直接使用Scrapy的话,在爬虫执行结束后,会被close, 最后的日志基本像这样:

2020-01-15 11:36:51 [scrapy.core.engine] INFO: Spider closed
(finished)

那么,scrapy-redis 是在哪里实现,当没有爬取任务的时候,进程不被关闭的呢?

另外,关于scrapy-redis, 还有几个疑问,顺便请教下老师

1、如果不需要去修改源代码进行扩展,是不是可以通过:pip install scrapy-redis 安装就行,而不需要将源码集成到项目中啊? (这个我看文档是支持直接 install 和下载源码 2种方式的)

2、当往队列发布start_urls的消息后, scrapy是如何实时监听到消息的(中间可能没有执行任务,当往队列push url, 能实时监听到),这个我在源码中一直没找到

正在回答 回答被采纳积分+3

2回答

bobby 2020-01-19 11:44:52

你下面虽然问题比较多,但是都可以归到一个函数上 https://img1.sycdn.imooc.com//szimg/5e23d098096aa03f15360696.jpg,每次获取下一个url都是这行代码完成的,你只要搞清楚这里的queue是怎么初始化的以及获取的时候是从哪里获取的就知道怎么办了

0 回复 有任何疑惑可以回复我~
bobby 2020-01-15 20:16:18

scrapy-redis不会关闭,因为scrapy会一直等待redis返回数据,如果一直没有返回会一直阻塞住,如果想关闭可以改一下源码,把从redis中获取数据设置一个timeout,如果超时没有获取到数据就发送一个关闭spider的信号就行了

  1. 通过pip安装没有问题,。但是我个人更加建议直接配置源码,因为有可能你就得这个不够灵活需要修改源码,通过pip安装的源码你修改了放到线上就没法用了,基本上所有的python库都可以直接拷贝源码

  2. start_urls只有在启动的时候会去用,如果你要想push一个url不应该是push到这个队列而应该是url的队列

0 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑7546459 #1
    额,老师,我有几个地方还是不太明白。
    1、scrapy-redis执行结束后,没有像scrapy关闭掉,这个我不是想关闭,我就是想了解原理。
       老师上面回复的:“因为scrapy会一直等待redis返回数据,如果一直没有返回会一直阻塞住”, 这个逻辑是在哪里控制的啊?
    
    2、我的业务需求:比如我想去豆瓣电影上爬取:战狼、奇幻森林、速度与激情8、我不是药神等电影(目的就是想爬啥才爬啥,想啥时候爬都行,不是一次性和全量爬取)。
    
    我现在的做法是,往redis的start_urls 队列 lpush 这些电影的url(可能不是一下子放完,中间可能存在时间间隔)。
    
    发现scrappy-redis爬虫项目服务启动后,都是能正常从这个队列里获取url并去爬取和执行的,我之前觉得这样就能满足我的需求了,但是老师你说应该push到url队列,我就有点懵了。
    
    push到start_urls队列有什么问题吗?  难道start_urls只push一部电影的url, 其他的电影push到url队列?
    
    3、scrappy-redis项目启动好之后,比如我现在往redis push 战狼的url, 过一会或几个小时甚至更长时间之后,push别的电影的url, 都是接收到这些url。 它的原理是什么呢, 通过轮训 或者 类型pub/sub 那种? 
    源码似乎是通过信号量,只是看懂大概:
    spiders.py中setup_redis()方法的这一行,然后触发spider_idle,进而触发next_requests(), 从start_url队列获取一些url:
    # The idle signal is called when the spider has no requests left,
    # that's when we will schedule new requests from redis queue
    crawler.signals.connect(self.spider_idle,   signal=signals.spider_idle)
    
    麻烦老师再帮忙解释一下,最好从源码的层面
    回复 有任何疑惑可以回复我~ 2020-01-17 14:16:42
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信