加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 按顺序在Scrapy中运行多个爬虫

发布时间:2020-12-20 13:45:57 所属栏目:Python 来源:网络整理
导读:我试图找到一种方法同时运行多个Scrapy爬虫,而不会遇到内存问题等. 目前,这是我的运行脚本: from twisted.internet import reactorfrom scrapy.crawler import Crawlerfrom scrapy import logfrom CSTest.spiders.CStest import MySpiderfrom scrapy.utils.
我试图找到一种方法同时运行多个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是你正在寻找的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读