在0.10版中加入了新功能。
Scrapy是由scrapy命令行工具(command-line tool)来控制的。为有所区分,下文用"Scrapy 工具"来特指scrapy命令行工具,而用"命令"或"Scrapy 命令"来特指子命令。
Scrapy工具提供了多种命令以实现多种功能,不同的命令接收不同的参数和选项。
(1.0版本已经移除了scrapy deploy,而支持独立运行的scrapyd-deploy。请参阅配置你的项目。)
配置设定
Scrapy会在标准位置下的scrapy.cfg文件(ini样式)中查找配置参数:
1./etc/scrapy.cfg或者c:\scrapy\scrapy.cfg(系统范围)
2.~/.config/scrapy.cfg($XDG_CONFIG_HOME) 和~/.scrapy.cfg($HOME) (用户范围全局设置),以及
3. 在scrapy项目根目录下的scrapy.cfg(请参见下一小节)
这些文件中的配置按优先次序排列合并:用户定义的值优先于系统范围默认值,而当项目范围的设置被定义时,会覆盖其他范围的设置。
Scrapy能读懂很多环境变量,而且也可以通过它们来配置。目前这些变量是:
·SCRAPY_SETTINGS_MODULE(请参阅指定设置)
·SCRAPY_PROJECT
·SCRAPY_PYTHON_SHELL(请参阅Scrapy shell)
Scrapy项目的默认结构
在深入命令行工具及其子命令之前,让我们先了解下Scrapy项目的目录结构。
默认情况下,所有Scrapy项目都有相同的文件结构(允许修改),类似如下:
scrapy.cfg文件所在的目录即为项目根目录。该文件包含定义项目设置的Python模块名。举个例子:
使用scrapy工具
你可以先不输入任何参数来运行Scrapy工具,之后一些使用帮助和可用命令会被显示出来:
若你现在在一个Scrapy项目下,第一行会显示当前活动的项目。上图说明Scrapy工具是从项目外运行的。若在项目内运行,则会如下显示:
创建项目
一般情况下,你用scrapy工具做的第一件事是创建一个Scrapy项目:
scrapy startproject myproject [project_dir]
以上命令会在名为project_dir目录下创建一个Scrapy项目。若没有指定project_dir,则目录名就为myproject。
接着进入刚创建好的项目目录:
cd project_dir
现在就可以在该目录中用scrapy命令去管理和控制你的项目了。
控制项目
从项目内部中用scrapy工具来控制和管理你的项目。
比如创建一个新的爬虫:
scrapy genspider mydomain mydomain.com
一些Scrapy命令(如crawl)必须从Scrapy项目内部中运行。请阅读下方的参考命令来了解哪些命令是必须这么做的,而哪些不用。
同时请注意一些命令从项目内部中运行时,其行为或略微不同。比如,若所提取的网址与某个特定的爬虫存在关联,则fetch命令会使用被覆盖过的爬虫行为(比如使用爬虫指定的user-agent)。之所以刻意这么做,是因为fetch命令本就是用来检测爬虫是如何下载页面的。
可用的工具命令
该小节讲到了一些可用的内置命令、命令描述以及一些用法实例。请记住,只需如下操作,你就可以随时了解到关于每种命令的更多信息:
scrapy -h
如果这样操作也可以看到所有可用的命令:
scrapy -h
有两种类型的命令,第一种只能从Scrapy项目内部中运行(项目指定命令),而第二种不用依赖于Scrapy项目就可运行(全局命令)。不过第二种命令在Scrapy项目中运行时可能有不同行为(因为它们可能使用项目中被覆盖过的设置)。
全局命令:
·startproject
·genspider
·settings
·runspider
·shell
·fetch
·view
·version
项目指定命令:
·crawl
·check
·list
·edit
·parse
·bench
startproject
·句法:scrapy startproject
[project_dir]
·是否依赖项目:否
在project_dir目录下创建一个名为project_name的Scrapy新项目。若没有指定project_dir,则目录名就为project_name。
用法实例:
genspider
·句法:scrapy genspider [-t template]
·是否依赖项目:否
在当前文件夹下或在当前项目的spiders文件夹下创建一个新的爬虫。参数用来设置爬虫的名字(name属性),而则用来生成爬虫的allowed_domains和start_urls属性。
用法实例:
crawl
·句法:scrapy crawl
·是否依赖项目:否
启动爬虫。
用法实例:
check
·句法:scrapy check [-l]
·是否依赖项目:是
执行协议检查。
用法实例:
list
·句法:scrapy list
·是否依赖项目:是
列出当前项目中所有可用的爬虫,输出形式为一行一个爬虫。
用法实例:
edit
·句法:scrapy edit
·是否依赖项目:是
通过在EDITOR环境变量(若未设定,则为EDITOR设置)中定义的编辑器来编辑指定的爬虫。
大部分情况下,该命令只是用来图个方便,开发者当然可以通过任何工具或IDE来编写或者调试爬虫。
用法实例
fetch
·句法:scrapy fetch
·是否依赖项目:否
通过Scrapy下载器来下载指定的网址并将内容写到标准输出。
有趣的一点是:该命令会根据爬虫的下载方式来提取页面。例如,假设爬虫覆盖了原有的USER_AGENT属性,那该命令就会采用覆盖过后的USER_AGENT属性。
所以该命令可被用来"查看"你的爬虫是如何提取某个特定页面的。
若在项目外使用,该命令则不会应用任何一个爬虫行为,而只是采用Scrapy下载器的默认设置。
支持选项:
·--spider=SPIDER: 绕过爬虫自动检测,并强制使用一个指定的爬虫
·--headers: 打印响应的HTTP头文件,而不是响应主体
·--no-redirect: 不去跟踪HTTP 3xx 重定向(默认是去跟踪)
用法实例:
view
·句法:scrapy view
·是否依赖项目:否
在浏览器中打开指定的网址(爬虫也会去"查看"页面)。有时候爬虫看到的页面跟普通用户看到的不一样,所以可以用该命令来知道爬虫是怎么"看"页面的 并确认跟你的预期是否一致。
支持选项:
·--spider=SPIDER:绕过爬虫自动检测,并强制使用一个指定的爬虫
·--no-redirect: 不去跟踪HTTP 3xx 重定向(默认是去跟踪)
用法实例:
shell
·句法:scrapy shell [url]
·是否依赖项目:否
为指定的网址启动Scrapy shell (若没指定,则为空白)。该命令同样支持UNIX风格的本地文件路径,不管它是绝对路径或是./和../开头的相对路径。请参阅Scrapy shell来了解更多信息。
支持选项:
·--spider=SPIDER: 绕过爬虫自动检测,并强制使用一个指定的爬虫
·-c code: 在shell中评估代码,打印结果并退出
·--no-redirect: 不去跟踪HTTP 3xx 重定向(默认是去跟踪);该选项只会对你在命令行中所传递的网址参数起作用;但如果你进入shell中,fetch(url)仍然会默认跟踪HTTP重定向。
用法实例:
parse
·句法:scrapy parse [options]
·是否依赖项目:是
提取指定的网址并用相应的爬虫来解析。通过--callback选项调用指定方法,若没有指定,则默认用parse方法解析。
支持选项:
·--spider=SPIDER: 绕过爬虫自动检测,并强制使用一个指定的爬虫
·--a NAME=VALUE: 设置爬虫参数(或重复)
·--callback或-c :把爬虫方法作为回调函数用于解析响应
·--pipelines:通过管道来处理数据字段
·--rules或-r:用CrawlSpider规则来发现回调函数(即爬虫方法)用于解析响应。
·--noitems: 不显示所爬取的字段
·--nolinks: 不显示所提取的链接
·--nocolour: 不改变输出文字的颜色
·--depth或-d: 指定递归跟踪链接的深度层次(默认:1)
·--verbose或-v: 展示关于每个深度层次的信息。
用法实例:
settings
·句法:scrapy settings [options]
·是否依赖项目:否
得到Scrapy设置中的值。
若在项目中运行,该命令会显示项目设置中的值,否则会显示默认设置的值。
用法实例:
runspider
·句法:scrapy runspider
·是否依赖项目:否
在未创建项目的情况下,运行一个在Python文件中的爬虫。
用法实例:
version
·句法:scrapy version [-v]
·是否依赖项目:否
打印Scrapy版本。若使用-v选项,则同样会打印Python,Twisted和Platform的信息,这在错误报告中非常有用。
bench
在0.17版中加入了新功能。
·句法:scrapy bench
·是否依赖项目:否
快速运行一次基准测试。Benchmarking
自定义项目命令
你也可以通过设置COMMANDS_MODULE来添加自定义的项目命令。请在scrapy/commands中参阅Scrapy命令方面的例子来了解如何执行你的命令。
COMMANDS_MODULE
默认:' '(空字符)
该模块用于查找自定义的Scrapy命令,同时也可用于在项目中添加自定义的命令。
用法实例:
通过setup.py入口点来注册命令
注意:
该功能还在试验阶段,请谨慎使用。
你可以在库文件setup.py的入口点中添加一个scrapy.commands,从而做到通过一个外部库来添加Scrapy命令。
下面这个例子就添加了my_command命令:
领取专属 10元无门槛券
私享最新 技术干货