python – 按顺序在Scrapy中运行多个爬虫
我试图找到一种方法同时运行多个Scrapy爬虫,而不会遇到内存问题等.
目前,这是我的运行脚本: from twisted.internet import reactor from scrapy.crawler import Crawler from scrapy import log from CSTest.spiders.CStest import MySpider from scrapy.utils.project import get_project_settings def setup_crawler(urls): spider = MySpider(urls=urls) settings = get_project_settings() crawler = Crawler(settings) crawler.configure() crawler.crawl(spider) crawler.start() filename_ = raw_input("Enter filename of seed list: ") # Enter name of list of seed sites separated by newline log.start() with open(filename_,"r") as starturlfile: urls = [x.strip() for x in starturlfile.readlines()] # Put urls into a list for domain in urls: setup_crawler([domain]) # Setup a crawler for each domain in seedlist reactor.run() # Start reactor 这将加载种子站点列表并为每个站点启动爬网程序.这工作正常,但是如果我有100个站点的种子列表,它会崩溃,因为它无法同时处理100个爬虫. 为了解决这个问题,我希望能够一次运行10个爬虫,依次遍历种子列表,直到所有100个域都被爬网. 我需要以某种方式检测爬行器何时完成,所以我可以在它的位置启动另一个. 有没有找到有多少活动抓取工具的功能?所以我可以放一个while循环 while True: if active_crawler_number < 10: start_the_next_crawler()# time.sleep(60) 我知道我可以这样做: self.crawler.signals.connect(self.next_site,signal=spider_closed) 但是,它会暂停程序直到爬虫程序完成,因此我一次只能启动1个爬虫,而不是10个. 我不确定解决这个问题的最佳方法是什么,所以如果你知道我应该走哪条路,请提交你的答案:) 如果我需要更多信息以便能够获得帮助,请告诉我我将编辑我的帖子并将其添加进去. 解决方法
使用subprocess和spider参数有什么问题?在您的示例中,您对所有蜘蛛使用单个进程,如果您拥有多核CPU,这将是一种浪费.
子流程也有一种方法到determine when the process is done. 另一种方法是使用Scrapyd.该项目功能正常,但我们正在寻找新的维护者. 我能想到的第三种方式是使用Scrapy signals,我认为engine_stopped是你正在寻找的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Centos5.x下升级python到python2.7版本教程
- Python:将文件解压缩到当前工作目录,但不保存zip中的目录结
- python – 使用H.323测试遗留语音邮件系统
- python – 在字符之间稍微延迟打印一个字符串
- 13个最常用的Python深度学习库介绍
- 顺序或并行:在python中读取多个文件的正确方法是什么?
- python使用xlrd与xlwt对excel的读写和格式设定
- 零基础写python爬虫之使用urllib2组件抓取网页内容
- python 向上取整ceil 向下取整floor 四舍五入round
- python – traceback.format_exc / print_exc在期待回溯时