首页
/ Scrapy 命令行工具完全解析:scrapy.cfg 配置、全部内置命令与自定义命令实现

Scrapy 命令行工具完全解析:scrapy.cfg 配置、全部内置命令与自定义命令实现

2026-09-05 20:24:53作者:庞眉杨Will

Scrapy 的几乎所有操作都通过 scrapy 命令行工具完成:创建项目、生成爬虫、启动抓取、调试页面、查看配置、运行基准测试。本文以官方文档 Command line tool 为主线,完整覆盖 scrapy 工具的配置加载机制、项目目录结构、全部 14 个内置命令(全局命令与项目命令)的参数用法,并结合 scrapy/cmdline.pyscrapy/commands 目录下的源码,剖析命令的发现、解析与执行流程,以及 ScrapyCommand 基类如何支撑自定义命令扩展。读完后你可以独立完成从 scrapy startprojectscrapy crawl 的完整工作流,并能编写项目级自定义命令。

scrapy.cfg 配置体系与查找顺序

scrapy 工具启动后,首先会按固定优先级在标准位置查找 ini 风格的 scrapy.cfg 文件:

  1. /etc/scrapy.cfgc:\scrapy\scrapy.cfg(系统级,全机器生效);
  2. ~/.config/scrapy.cfg(即 $XDG_CONFIG_HOME)与 ~/.scrapy.cfg(即 $HOME),用于全局(用户级)配置;
  3. Scrapy 项目根目录内的 scrapy.cfg

三者按上述顺序合并:用户自定义值优先于系统级默认值,而项目级配置一旦定义则覆盖其余两者。项目级 scrapy.cfg 的最小内容形如:

[settings]
default = myproject.settings

其中 default 指定了项目的 settings 模块路径。这个机制的模板来源是 scrapy/templates/project/scrapy.cfgscrapy startproject 创建项目时渲染的就是它。

scrapy.cfg 外,Scrapy 还通过三个环境变量接受配置:

环境变量 作用
SCRAPY_SETTINGS_MODULE 指定 settings 模块(见 settings 文档
SCRAPY_PROJECT 指定使用哪个项目别名(详见下文“多项目共享根目录”)
SCRAPY_PYTHON_SHELL 指定 scrapy shell 使用的交互式 shell(见 shell 文档

多项目共享同一根目录

一个包含 scrapy.cfg 的项目根目录可以被多个 Scrapy 项目共享,每个项目拥有独立的 settings 模块。此时需要在 scrapy.cfg[settings] 段中为各 settings 模块定义别名:

[settings]
default = myproject1.settings
project1 = myproject1.settings
project2 = myproject2.settings

默认情况下 scrapy 使用 default 指向的设置;通过 SCRAPY_PROJECT 环境变量可以切换到其他项目:

$ scrapy settings --get BOT_NAME
Project 1 Bot
$ export SCRAPY_PROJECT=project2
$ scrapy settings --get BOT_NAME
Project 2 Bot

Scrapy 项目的默认目录结构

在深入各子命令之前,先明确项目结构。Scrapy 项目默认结构如下:

scrapy.cfg
myproject/
    __init__.py
    items.py
    middlewares.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        spider1.py
        spider2.py
        ...

scrapy.cfg 所在目录称为项目根目录(project root directory),许多命令“必须在项目内运行”正是以该目录为判定基准——这一点在 scrapy/cmdline.pyexecute() 中由 inside_project() 函数实现,命令是否可用(requires_project)就取决于此。

几个容易混淆的命名关系值得注意:

  • SPIDER_MODULESNEWSPIDER_MODULE 默认引用项目模块本身,因此必须与其实际位置匹配,scrapy listscrapy genspiderscrapy crawl 都依赖它们来定位爬虫;
  • BOT_NAME 默认与项目同名,但它只是一个标识符,不要求等于模块名;
  • middlewares.pypipelines.py 中类名使用“大写项目名”作前缀(如 MyprojectDownloaderMiddleware)仅是命名约定,与模块名是否一致无关。

上述结构由 scrapy/templates/project 模板目录生成,其中 settings.py.tmplitems.py.tmplpipelines.py.tmplmiddlewares.py.tmpl 在创建项目时被逐一渲染(见 scrapy/commands/startproject.py 中的 TEMPLATES_TO_RENDER)。

使用 scrapy 工具:帮助输出与全局选项

不带任何参数运行 scrapy,会打印版本、当前激活的项目、用法说明和可用命令列表:

Scrapy X.Y - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  fetch         Fetch a URL using the Scrapy downloader
  runspider     Run a spider from a Python file, no project required
  [...]

第一行若在项目内运行,会显示 Scrapy X.Y - project: myproject。这一输出由 scrapy/cmdline.py 中的 _print_header()_print_commands() 生成:项目外运行时还会额外提示 [ more ] More commands available when run from project directory

查看单个命令的完整帮助:

scrapy <command> -h

查看所有命令:

scrapy -h

从源码看,每个命令在 scrapy <command> -h 时都会注册一组全局选项(定义于 scrapy/commands/init.pyScrapyCommand.add_options()),它们对所有内置命令统一可用:

选项 作用
--logfile FILE 指定日志文件;省略时写 stderr
-L, --loglevel LEVEL 设置日志级别(默认取 LOG_LEVEL 设置值)
--nolog 完全禁用日志
--profile FILE 将 cProfile 性能统计写入文件(见 scrapy/cmdline.py_run_command_profiled
--pidfile FILE 将当前进程 PID 写入文件
-s, --set NAME=VALUE 设置/覆盖设置项,可重复使用
--pdb 出错时进入 pdb 调试(若安装了 ipdb 则用 ipdb)

-s 选项以 priority="cmdline" 写入 settings,即优先级高于项目与爬虫级别的设置(解析逻辑在 ScrapyCommand.process_options(),见 scrapy/commands/init.py)。

创建与操控项目

startproject:创建项目

语法:scrapy startproject <project_name> [project_dir](全局命令,无需项目)。

project_dir 下创建名为 project_name 的项目;若未指定 project_dir,则与 project_name 同名。

$ scrapy startproject myproject
cd myproject

创建完成即可在该目录中使用 scrapy 命令管理项目。源码层面(scrapy/commands/startproject.py)还有几条约束:

  • 项目名必须匹配 ^[_a-zA-Z]\w*$,即“以字母开头,只含字母、数字、下划线”,否则报错退出;
  • 同名模块已可导入时(find_spec 探测)会被拒绝;
  • 目标目录已存在 scrapy.cfg 时直接报错,退出码为 1。

命令成功结束时会提示下一步操作:cd project_dir 后运行 scrapy genspider example example.com

genspider:基于模板生成爬虫

语法:scrapy genspider [-t template] <name> <domain or URL>(全局命令)。

在当前目录(项目外)或项目 spiders/ 目录(项目内)创建新爬虫。<name> 成为爬虫的 name 属性,<domain or URL> 用于生成 allowed_domainsstart_urls 属性:

$ scrapy genspider -l
Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

$ scrapy genspider example example.com
Created spider 'example' using template 'basic'

$ scrapy genspider -t crawl scrapyorg scrapy.org
Created spider 'scrapyorg' using template 'crawl'

默认模板 basic 的内容见 scrapy/templates/spiders/basic.tmpl,渲染后的爬虫形如:

import scrapy


class $classname(scrapy.Spider):
    name = "$name"
    allowed_domains = ["$domain"]
    start_urls = ["$url"]

    def parse(self, response):
        pass

这是最方便的爬虫脚手架,但不是唯一方式——完全可以手写爬虫源码文件。

scrapy genspider-l(列出模板)、-t(指定模板)外,源码中还提供以下选项(见 scrapy/commands/genspider.py):-e/--edit(创建后立即编辑)、-d TEMPLATE(将模板内容打印到标准输出)、--force(爬虫已存在时强制覆盖)。

自定义爬虫模板

有两种方式提供自定义模板:

  1. TEMPLATES_DIR 设置指向一个包含 spiders 子目录的目录,为每个模板写一个 {name}.tmpl 文件,name 即传给 -t 的值。自定义模板会整体替换内置模板——内置模板位于 scrapy 包内的 templates 目录(默认值见 scrapy/settings/default_settings.pyTEMPLATES_DIR = str((Path(__file__).parent / ".." / "templates").resolve())),想保留哪个就复制哪个过去;
  2. -t 直接传一个 .tmpl 文件的路径,无需改动 TEMPLATES_DIR(查找顺序是“相对路径 → TEMPLATES_DIR/spiders”,见 genspider.py_find_template())。

模板使用 string.Template 渲染:$variable${variable} 会被替换,$$ 渲染为单个 $(正则表达式中常用)。除下列变量外的任何变量都会导致渲染失败:

  • name:传给命令的爬虫名;
  • module:将 name 规范化为合法模块名(连字符、点号替换为下划线,非字母开头时加前缀 a,见 genspider.pysanitize_module_name()),同时用作生成文件文件名;
  • classnamemodule 的驼峰形式加 Spider 后缀;
  • url:传入的 URL,无协议时自动补 https
  • domainurl 的域名(urlparse(url).netloc);
  • project_nameBOT_NAME
  • ProjectNameproject_name 的驼峰形式。

变量构造逻辑可对照 genspider.py_generate_template_variables()

可用命令总览

命令分为两类(判定标准是 requires_project 类属性,见 scrapy/cmdline.py_get_commands_from_module()):

全局命令(无项目也可运行)startprojectgenspidersettingsrunspidershellfetchviewversionbench

仅项目内命令crawlchecklisteditparse

注意:全局命令在项目内运行时行为可能略有不同——它们会使用项目的设置。例如 fetch 在被抓 URL 关联到某个爬虫时,会应用该爬虫的覆盖行为(如 custom_settings 属性);这是有意设计,因为 fetch 的用途就是验证爬虫实际如何下载页面。

逐命令详解

crawl

  • 语法:scrapy crawl <spider>
  • 需要项目:

list 报告中的某个爬虫 name 启动抓取;要运行文件中的爬虫请用 runspider

支持的选项:

  • -h, --help:显示帮助并退出;
  • -a NAME=VALUE:设置爬虫参数(可重复);
  • --output FILE / -o FILE:把抓到的 item 追加到 FILE 末尾(- 表示标准输出);在 URI 末尾加冒号指定格式,如 -o FILE:FORMAT
  • --overwrite-output FILE / -O FILE:把 item 写入 FILE 并覆盖已有内容,格式用法同上。
$ scrapy crawl myspider
[ ... myspider starts crawling ... ]

$ scrapy crawl -o myfile:csv myspider
[ ... 抓取并追加结果到 myfile(csv 格式)... ]

$ scrapy crawl -O myfile:json myspider
[ ... 抓取并以 json 格式覆盖写入 myfile ... ]

源码实现见 scrapy/commands/crawl.py:一次只能传一个爬虫名(超过一个会 UsageError),-o/-O 由公共基类 BaseRunSpiderCommand 解析为 FEEDS 设置(feed_process_params_from_cli),因此输出走的是 Feed Export 机制;若 FeedExporter 扩展被禁用,engine 启动时会收到“配置了 FEEDS 但不会导出”的告警。

check

  • 语法:scrapy check [-l] <spider>
  • 需要项目:

运行契约(contract)检查。

$ scrapy check -l
first_spider
  * parse
  * parse_item
second_spider
  * parse
  * parse_item

$ scrapy check
F.F.
======================================================================
FAIL: [first_spider] parse (@returns post-hook)
----------------------------------------------------------------------
Traceback (most recent call last):
  ...
scrapy.exceptions.ContractFail: Returned 92 requests, expected 0..4

======================================================================
FAIL: [first_spider] parse_item (@scrapes post-hook)
----------------------------------------------------------------------
Traceback (most recent call last):
  ...
scrapy.exceptions.ContractFail: Missing fields: RetailPricex

----------------------------------------------------------------------
Ran 4 contracts in 0.174s

FAILED (failures=2)

-l 只列出各爬虫中带契约的方法而不执行;不带 -l 时对指定爬虫(或全部爬虫)真实发起请求并校验。实现见 scrapy/commands/check.py,其 process_options() 会主动清空 ITEM_PIPELINESFEEDS(契约会丢弃回调输出,避免 pipeline 产生副作用),测试报告格式沿用 unittest.TextTestRunner

list

  • 语法:scrapy list
  • 需要项目:

列出当前项目全部可用爬虫,每个一行:

$ scrapy list
spider1
spider2

实现很简单:通过 get_spider_loader(self.settings) 加载爬虫后打印 sorted(spider_loader.list())(见 scrapy/commands/list.py)。

edit

  • 语法:scrapy edit <spider>
  • 需要项目:

EDITOR 环境变量(未设置时取 EDITOR 设置项)定义的编辑器打开指定爬虫文件。注意 scrapy/cmdline.pyexecute() 会把环境变量 EDITOR 优先写入 settings,即环境变量优先于设置项。这只是一个最常用场景的快捷方式,开发者当然可以用任意工具或 IDE。

$ scrapy edit spider1

EDITOR 的值可包含参数(如 code -w),edit.py 会用 shlex.split 拆分后以子进程调用,不经过 shell。

fetch

  • 语法:scrapy fetch <url>
  • 需要项目:

用 Scrapy 的 downloader 下载给定 URL,并把响应内容写到标准输出。它的价值在于“以爬虫的方式下载页面”:例如爬虫若通过 USER_AGENT 属性覆盖了 User Agent,fetch 就会使用那个值——用它来“看清”爬虫实际会拿到什么。项目外使用时不应用任何爬虫级行为,仅用 Scrapy 默认下载设置。

支持的选项:

  • --spider=SPIDER:跳过爬虫自动探测,强制使用指定爬虫;
  • --headers:打印请求与响应的 HTTP 头,替代响应体;
  • --no-redirect:不跟随 HTTP 3xx 重定向(默认跟随)。
$ scrapy fetch --nolog http://www.example.com/some/page.html
[ ... html content here ... ]

$ scrapy fetch --nolog --headers http://www.example.com/
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en
> User-Agent: Scrapy/X.Y (+https://scrapy.org)
> Accept-Encoding: gzip, deflate, br, zstd
>
< Date: ...
< Content-Type: text/html
< Server: ...

从源码看(scrapy/commands/fetch.py),fetch 会构造一个只包含单个 Request 的爬虫,回调里打印响应;--no-redirect 通过 handle_httpstatus_all = True 实现“连 3xx 也原样打印”,而默认行为则是用 SequenceExclude(range(300, 400)) 让框架正常处理 3xx。

view

  • 语法:scrapy view <url>
  • 需要项目:

像爬虫“看到”的那样在浏览器中打开 URL。有时爬虫看到的页面与普通用户不同,view 可用于确认爬虫所见是否符合预期。

支持的选项:

  • --spider=SPIDER:绕过自动探测,强制使用指定爬虫;
  • --no-redirect:不跟随 HTTP 3xx 重定向(默认跟随)。
$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]

实现上 view.py 直接继承 fetch.Command,把“打印响应体”替换为对 TextResponse 调用 open_in_browser();非文本响应会报错“Cannot view a non-text response”。

shell

  • 语法:scrapy shell [url]
  • 需要项目:

为给定 URL(可省略)启动 Scrapy 交互 shell,详见 shell 文档。还支持 UNIX 风格的本地文件路径——相对路径带 ./../ 前缀,或绝对路径。

支持的选项:

  • --spider=SPIDER:绕过自动探测,强制使用指定爬虫;
  • -c code:在 shell 中执行代码、打印结果并退出;
  • --no-redirect:不跟随命令行参数 URL 的 HTTP 3xx 重定向(默认跟随);注意这只影响命令行传入的 URL,进入 shell 后 fetch(url) 默认仍会跟随重定向。
$ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ... ]

$ scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)'
(200, 'http://www.example.com/')

# shell 默认跟随重定向
$ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(200, 'http://example.com/')

# 可用 --no-redirect 关闭(仅针对命令行参数 URL)
$ scrapy shell --no-redirect --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(302, 'http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F')

源码中 shell 命令声明了 default_settings(见 scrapy/commands/shell.py):DUPEFILTER_CLASS 指向 BaseDupeFilter(不记录去重状态)、LOGSTATS_INTERVAL = 0(不输出周期统计)、REMOTE_CONTROL_ENABLED = False(不启用 telnet 远程控制)——这些都是为交互式调试做的轻量化处理。

parse

  • 语法:scrapy parse <url> [options]
  • 需要项目:

抓取给定 URL,并用处理该 URL 的爬虫解析它;回调方法由 --callback 指定,缺省为 parse

支持的选项:

  • --spider=SPIDER:绕过自动探测,强制使用指定爬虫;
  • -a NAME=VALUE:设置爬虫参数(可重复);
  • --callback / -c:解析响应所用的爬虫方法;
  • --meta / -m:附加到回调请求的 request meta,必须是合法 JSON 字符串,如 --meta='{"foo" : "bar"}'
  • --cbkwargs:附加到回调的 kwargs,必须是合法 JSON 字符串,如 --cbkwargs='{"foo" : "bar"}'
  • --pipelines:让 item 经过 item pipeline 处理
  • --rules / -r:用 CrawlSpider 的 rules 发现解析响应所用的回调方法;
  • --noitems:不显示抓到的 item;
  • --nolinks:不显示提取出的链接;
  • --nocolour:不使用 pygments 着色;
  • --depth / -d:递归跟随请求的深度(默认 1);
  • --verbose / -v:显示每一深度层级的信息;
  • --output / -o:把抓到的 item 转储到文件。
$ scrapy parse http://www.example.com/ -c parse_item
[ ... scrapy log lines crawling example.com spider ... ]

>>> STATUS DEPTH LEVEL 1 <<<
# Scraped Items  ------------------------------------------------------------
[{'name': 'Example item',
 'category': 'Furniture',
 'length': '12 cm'}]

# Requests  -----------------------------------------------------------------
[]

settings

  • 语法:scrapy settings [options]
  • 需要项目:

查看设置项的值。项目内使用时显示项目设置值,否则显示 Scrapy 默认值:

$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0

源码 settings.py 中还提供了类型化的读取选项:--getbool SETTING--getint SETTING--getfloat SETTING--getlist SETTING,分别按布尔/整数/浮点/列表解释并打印。

runspider

  • 语法:scrapy runspider <spider_file.py>
  • 需要项目:

运行给定 Python 文件中定义的爬虫,无需项目。支持的选项与 crawl 相同(二者共用 BaseRunSpiderCommand 基类)。

$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]

实现细节(scrapy/commands/runspider.py):临时把文件所在目录插入 sys.path 头部导入该文件,要求文件中至少有一个 Spider 子类(取第一个);其 default_settingsSPIDER_LOADER_CLASS 设为 DummySpiderLoader,即不加载任何项目爬虫。

version

  • 语法:scrapy version [-v]
  • 需要项目:

打印 Scrapy 版本;加 -v 同时打印 Python、Twisted 和平台信息,提交 bug 报告时有用:

$ scrapy version -v
Scrapy     : 2.x.y
Python     : 3.x.z ...
Twisted    : ...

bench

  • 语法:scrapy bench
  • 需要项目:

运行一个快速基准测试,详见 benchmarking 文档

scrapy/commands/bench.py 可以看到其工作方式:用 subprocess 启动本地基准服务器 scrapy.utils.benchserver(监听 http://localhost:8998),然后运行内置的 _BenchSpider 抓取 total=100000 个页面,统计抓取速率——这是验证本机 Scrapy 运行环境性能的标准手段。

需要启动爬取的命令:CrawlerProcess 的选择机制

以下命令都需要以某种方式运行一次抓取(用户爬虫或内部特殊爬虫):benchcheckcrawlfetchparserunspidershellview。它们内部使用 scrapy.crawler.AsyncCrawlerProcessscrapy.crawler.CrawlerProcess 的一个实例。大多数情况下这个细节对用户无关紧要,但当你需要非默认 Twisted reactor 时,它就很重要了。

Scrapy 的选择规则(见 scrapy/cmdline.pyexecute()):

  • TWISTED_REACTOR_ENABLEDFalse 时,使用 AsyncCrawlerProcess
  • 否则若 TWISTED_REACTOR 为默认值 'twisted.internet.asyncioreactor.AsyncioSelectorReactor',同样使用 AsyncCrawlerProcess
  • 其余情况使用 CrawlerProcess

爬虫级设置不参与该决策——它在这个决定做出之后才加载。因此,如果项目级设置是 asyncio reactor(显式设置或 Scrapy 默认),而被运行爬虫的设置却改为其他 reactor,AsyncCrawlerProcess 会因只支持 asyncio reactor 而报错。此时的解决办法是把 FORCE_CRAWLER_PROCESS 设置为 True(项目级或在命令行传入),强制 Scrapy 使用支持所有 reactor 的 CrawlerProcess。相关设置的默认值可见 scrapy/settings/default_settings.pyFORCE_CRAWLER_PROCESS = False)与 asyncio 文档

自定义项目命令

通过 COMMANDS_MODULE 注册

借助 COMMANDS_MODULE 设置可以为项目添加专属命令,它们会被自动发现并经 scrapy 工具暴露出来。

COMMANDS_MODULE 设置:默认值为空字符串 ''(见 default_settings.py)。指向一个用于查找自定义命令的模块,例如:

COMMANDS_MODULE = "mybot.commands"

创建自定义命令:继承 scrapy.commands.ScrapyCommand 并实现必需方法,即可为命令行界面扩展项目专属功能(如数据处理工具、部署辅助)。行为由类属性与重写方法共同决定。

可设置的属性:

  • requires_project(bool):为 True 时命令只能在项目内运行,默认 False
  • requires_crawler_process(bool):为 True 时 Scrapy 会在命令运行前创建 AsyncCrawlerProcessCrawlerProcess 实例并挂到 crawler_process 属性上,默认 True
  • default_settings(dict):该命令运行时覆盖默认设置的字典,默认 {}
  • exitcode(int):命令完成时设置的进程退出码,默认 0

必须重写的方法:

  • short_desc():返回命令的简短描述;
  • run(args, opts):命令执行的主入口。

可以重写的方法:

  • syntax():返回命令语法(建议单行、不含命令名);
  • long_desc():返回详细描述;
  • add_options(parser):向参数解析器添加命令专属选项;
  • process_options(args, opts):处理命令行选项、在 crawler_process 实例化之前设置 settings。

一个完整示例:

from scrapy.commands import ScrapyCommand
import argparse


class MyCustomCommand(ScrapyCommand):
    requires_project = True

    def syntax(self):
        return "[options] <spider_name>"

    def short_desc(self):
        return "Run my custom command"

    def add_options(self, parser):
        super().add_options(parser)
        parser.add_argument("--my-option", help="My custom option")

    def run(self, args, opts):
        # Command implementation here
        spider_name = args[0] if args else None
        print(f"Running custom command for spider: {spider_name}")

真实示例可参考 scrapy/commands 目录下的全部内置命令。ScrapyCommand 类属性与 requires_project/requires_crawler_process 的默认值见 scrapy/commands/init.py。命令发现流程本身由 scrapy/cmdline.py_get_commands_dict() 完成:先扫描内置 scrapy.commands 模块,再合并 entry points 与 COMMANDS_MODULE 中找到的命令类。

注意:COMMANDS_MODULE 属于 pre-crawler 设置,在创建爬虫进程之前就已生效。

通过 setup.py entry points 注册(供外部库使用)

外部库也可以在库的 setup.py(或等价打包配置)的 entry points 中添加 scrapy.commands 段来注册命令。例如添加 my_command 命令:

from setuptools import setup, find_packages

setup(
    name="scrapy-mymodule",
    entry_points={
        "scrapy.commands": [
            "my_command=my_scrapy_module.commands:MyCommand",
        ],
    },
)

该机制在 scrapy/cmdline.py 中实现:_get_commands_from_entry_points() 通过 importlib.metadata.entry_points(group="scrapy.commands") 加载所有已安装库注册的命令,并与内置命令合并。

附注:deploy 命令的历史沿革

早期的 scrapy deploy 命令已在 1.0 中移除,被独立的 scrapyd-deploy 工具取代。部署相关需求请参考 Deploying your project 文档

小结

scrapy 命令行工具是 Scrapy 的总入口:scrapy.cfg 三级合并加环境变量决定了“在哪个项目、用哪套设置”下工作;14 个内置命令覆盖了从 startproject 建项、genspider 生成爬虫,到 crawl/runspider 运行、fetch/view/shell/parse 调试、settings/version/bench 运维辅助的完整生命周期;而 ScrapyCommand 基类、COMMANDS_MODULEscrapy.commands entry points 三条扩展路径,使团队可以无缝地把私有工具接入 scrapy 命令空间。遇到行为疑问时,scrapy <command> -h 加上 scrapy/commandsscrapy/cmdline.py 源码,是最快的定位路径。

登录后查看全文
热门项目推荐
相关项目推荐