zoukankan      html  css  js  c++  java
  • Scrapy 运行多个爬虫

    本文所使用的 Scrapy 版本:Scrapy==1.8.0

    一个 Scrapy 项目下可能会有多个爬虫,本文陈述两种情况:

    1. 多个爬虫
    2. 所有爬虫

    显然,这两种情况并不一定是等同的。假设当前项目下有 3 个爬虫,分别名为:route、dining、experience,并在项目目录下创建一个 main.py 文件,下面的示例代码都写在这个文件中,项目执行时,在命令行下执行 python main.py 或者在 pycharm 中把这个脚本文件设置为执行脚本即可。

    1. 运行多个爬虫

    核心点:使用 CrawlerProcess

    代码如下:

    from scrapy.crawler import CrawlerProcess
    from scrapy.utils.project import get_project_settings
    
    # 根据项目配置获取 CrawlerProcess 实例
    process = CrawlerProcess(get_project_settings())
    
    # 添加需要执行的爬虫
    process.crawl('route')
    process.crawl('dining')
    process.crawl('experience')
    
    # 执行
    process.start()
    

    2. 运行所有爬虫

    核心点:使用 SpiderLoader

    代码如下:

    from scrapy.crawler import CrawlerProcess
    from scrapy.utils.project import get_project_settings
    from scrapy.spiderloader import SpiderLoader
    
    # 根据项目配置获取 CrawlerProcess 实例
    process = CrawlerProcess(get_project_settings())
    
    # 获取 spiderloader 对象,以进一步获取项目下所有爬虫名称
    spider_loader = SpiderLoader(get_project_settings())
    
    # 添加需要执行的爬虫
    for spidername in spider_loader.list():
        process.crawl(spidername)
    
    # 执行
    process.start()
    

    3. 关于 ScrapyCommand

    网上有部分文章说到使用 ScrapyCommand 这个类下面的 crawler_process.list() 方法可以得到项目下的所有爬虫名称,但我在最新的官方文档中已经搜索不到 ScrapyCommand 这个类,估计是已经弃用了

    4. 其它

    如果需要向某个爬虫传递参数,可以在 process.crawl 方法中添加进去,例如:

    process.crawl('dining', dt='20191119')
    

    则在 dining 这个爬虫(类)中,可以在 __init__ 方法中接收这个 dt 参数。例如:

    class Dining(scrapy.Spider):
        name = 'dining'
        
        def __init__(self, dt)
            self.dt = dt
    
  • 相关阅读:
    loj2042 「CQOI2016」不同的最小割
    loj2035 「SDOI2016」征途
    luogu2120 [ZJOI2007]仓库建设
    luogu3195 [HNOI2008]玩具装箱TOY
    51nod 1069 Nim游戏 + BZOJ 1022: [SHOI2008]小约翰的游戏John(Nim游戏和Anti-Nim游戏)
    HDU 5723 Abandoned country(最小生成树+边两边点数)
    BZOJ 1497: [NOI2006]最大获利(最大权闭合图)
    51nod 1615 跳跃的杰克
    SPOJ 839 Optimal Marks(最小割的应用)
    UVa 11107 生命的形式(不小于k个字符串中的最长子串)
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/scrapy_run_spiders.html
Copyright © 2011-2022 走看看