我正在尝试找到一种同时运行多个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个。
我不太确定该如何解决这个问题,所以如果您有任何想法可以指导我,就请提交您的答案 :)
如果需要从我这里获取更多信息才能得到帮助,请告诉我,我会编辑我的帖子并添加进去。