首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

命令行工具

在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命令:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171213G0RE7S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券