本文所使用的 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...