当前位置: 首页 > 后端技术 > Python

Scrapy跑量化爬虫

时间:2023-03-26 16:13:24 Python

假设有大约3000个scrapy爬虫文件,10台机器,如何合理分配爬虫?什么,这么简单的数学题还要问,把一台机器分成300个爬虫就够了。确实,这种分配是最简单直接的,但是也带来了一些问题。比如有的网站页面少,有的网站大,每个爬虫的运行时间不一样,最终可能会导致一机九围的累死。而且在一台机器上同时运行300个爬虫会消耗大量的硬件资源,并且可能会导致很多爬虫不能正常运行,所以即使这样分配爬虫,也要限制爬虫运行的数量同时。当一个爬虫完成运行时,将执行下一个。解决办法可以是先创建一个队列,将待爬取的爬虫存放在队列中(通常创建三个,分别是pending(待爬取)、running(爬取)、finished(已爬取)。然后每台机器开始取指定数量的爬虫运行,当其中一个爬虫运行完毕后,会从任务队列中取出,直到队列为空。要实现这种少量队列,请使用Redis集合。我们创建pending、running、finished三个集合,然后将所有爬虫的name字段存储在pending集合中(当然爬虫文件名也是可以的,只是启动爬虫而已。方式略有不同),以及那么我们就可以写一个脚本来运行爬虫了。有两种方式:1.爬取命令伪代码:pending.add(所有爬虫)whileTrue:iflen(running)