Scrapy 執行多個爬蟲

2022-01-11 11:34:07 字數 1750 閱讀 4187

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

多個爬蟲

所有爬蟲

顯然,這兩種情況並不一定是等同的。假設當前專案下有 3 個爬蟲,分別名為:route、dining、experience,並在專案目錄下建立乙個main.py檔案,下面的示例**都寫在這個檔案中,專案執行時,在命令列下執行python main.py或者在 pycharm 中把這個指令碼檔案設定為執行指令碼即可。

核心點:使用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()

核心點:使用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()

網上有部分文章說到使用scrapycommand這個類下面的crawler_process.list()方法可以得到專案下的所有爬蟲名稱,但我在最新的官方文件中已經搜尋不到scrapycommand這個類,估計是已經棄用了

如果需要向某個爬蟲傳遞引數,可以在process.crawl方法中新增進去,例如:

process.crawl('dining', dt='20191119')
則在dining這個爬蟲(類)中,可以在__init__方法中接收這個dt引數。例如:

class dining(scrapy.spider):

name = 'dining'

def __init__(self, dt)

self.dt = dt

Scrapy 執行多個爬蟲spider檔案

1.在專案資料夾中新建乙個commands資料夾 2.在command的資料夾中新建乙個檔案 crawlall.py 3.在crawlall.py 中寫乙個command類,該類繼承 scrapy.commands from scrapy.commands import scrapycommand ...

scrapy 執行同個專案多個爬蟲

一開始我們預設都是只有乙個爬蟲的,所以執行的 都是在專案下建立乙個py檔案 from scrapy import cmdline cmdline.execute scrapy crawl 爬蟲名 split 但是要執行多個爬蟲就犯難了,在這裡我只是做個筆記加強記憶 原部落格 其中執行以下 1 在sp...

Scrapy框架啟動多個爬蟲的方法

有的時候在抓取過程中可能會出現同乙個 相同資料在不同url裡有不同爬取方法的情況,所以這個時候需要編寫多個爬蟲,最開始是使用cmdline.execute scrapy crawl spider1 split 啟動爬蟲,但發現用這種方法執行多個最後真正抓取的只有第二個。from scrapy imp...