命令行工具
Scrapy是通过scarpy这个命令行工具来控制的,在这里被称为“Scrapy工具”,以区别于子命令,我们只是称之为“命令”或“Scrapy命令”。
Scrapy 工具提供了几种命令行,为了多种不同的目的,并且每个命令行都接受一系列不同的参数和选项。
配置设置
Scrapy会查找配置参数在ini样式的scrapy.cfg 的文件在标准位置。
- /etc/scrapy.cfg或c:\scrapy\scrapy.cfg(全系统),
- .config/ clip .cfg ( X D G C O N F I G H O M E ) 和 / . c l i p . c f g ( XDG_CONFIG_HOME)和~/. clip .cfg ( XDGCONFIGHOME)和 /.clip.cfg(HOME)用于全局(用户范围)设置,以及
- scrapy.cfg在根目录(参见下一节)。
这些文件中的设置将按照列出的首选项顺序合并:用户定义的值具有比系统默认值更高的优先级,当定义时,项目范围的设置将覆盖所有其他设置。
环境变量设置
Scrapy还理解并可以通过许多环境变量进行配置。目前,这些包括:
- SCRAPY_SETTINGS_MODULE (see Designating the settings)
- SCRAPY_PROJECT (see Sharing the root directory between projects)
- SCRAPY_PYTHON_SHELL
Scrapy项目的默认结构
在深入研究命令行工具及其子命令之前,让我们先了解一下Scrapy项目的目录结构。
虽然可以修改,但所有Scrapy的项目默认都有相同的文件结构,类似如下:
scrapy.cfg
myproject/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
spider1.py
spider2.py
...
scrapy.cfg文件包含了python模块的名字定义了项目的设置。这是一个例子:
[settings]
default = myproject.settings
在项目之间共享根目录
一个项目的根目录,它包含了scrapy.cfg,可以被很多Scrapy项目共享,每个都有自己的配置模块。
在这种情况下,您必须在您的clip .cfg文件的[settings]下为这些设置模块定义一个或多个别名:
[settings]
default = myproject1.settings
project1 = myproject1.settings
project2 = myproject2.settings
默认情况下,这个Scrapy的命令行工具将使用默认设置。使用SCRAPY_PROJECT环境变量指定要使用的不同Scrapy项目:
$ scrapy settings --get BOT_NAME
Project 1 Bot
$ export SCRAPY_PROJECT=project2
$ scrapy settings --get BOT_NAME
Project 2 Bot
使用sracpy工具
你可以直接使用Scrapy没有参数,然后大会打印出参数和可用的命令:
Scrapy X.Y - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
crawl Run a spider
fetch Fetch a URL using the Scrapy downloader
[...]
第一行输出会告诉你现在活跃的项目如果你在一个Scrapy项目中,如在项目中:
Scrapy
创建项目
你主要要做的第一件事对于使用scrapy工具就是创建项目。
scrapy startproject myproject [project_dir]
这将在project_dir目录下创建一个Scrapy项目。如果没有指定project_dir, project_dir将与myproject相同。
进入:
cd project_dir
控制项目
你是用scrapy工具从你的项目中控制/管理它们。
举个例子,创建一个新spider:
scrapy genspider mydomain mydomain.com
一些Scrapy的命令(比如crawl)必须在Scrapy的项目中运行。有关哪些命令必须从项目内部运行,哪些不能,请参阅下面的命令参考资料。
还要记住,在从项目内部运行一些命令时,它们的行为可能略有不同。例如,如果正在获取的url与某个特定的spider关联,fetch命令将使用spider覆盖的行为(例如user_agent属性来覆盖user_agent)。这是有意的,因为fetch命令用于检查spiders如何下载页面。
可用工具命令
本节包含可用的内置命令列表,以及描述和一些使用示例。记住,你总是可以得到更多的信息,每一个命令运行:
scrapy <command> -h
你可以看到所有的可用命令通过:
scrapy -h
-h 帮助。
有两种命令,一种只在一个活动的Scrapy项目中工作(特定于项目的命令),另一种也不工作于活动的Scrapy项目中(全局命令),尽管从一个项目中运行时它们的行为可能略有不同(因为它们将使用项目覆盖的设置)。
全局命令
- startproject
- genspider
- settings
- runspider
- shell
- fetch
- view
- version
项目专属命令: - crawl
- check
- list
- edit
- parse
- bench
startproject
语法: scrapy startproject <project_name> [project_dir]
不要求在项目中
在project_dir目录下创建一个名为project_name的新剪贴项目。如果没有指定project_dir, project_dir将与project_name相同。
用例:
$ scrapy startproject myproject
genspider
语法:scrapy genspider [-t template]
不要求在项目中
如果从项目内部调用,则在当前文件夹或当前项目的spider文件夹中创建一个新spider。参数设置为爬行器的名称,而用于生成allowed_domains和start_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'
这只是一个基于预定义模板创建spider的方便快捷命令,但肯定不是创建spider的唯一方法。您可以自己创建spider源代码文件,而不是使用这个命令。
…