Scrapy命令行工具简介
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0,
在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spider)程序,然后使用scrapy crawl命令执行Spider。
这种方式很初级、繁琐,不适合更大型的项目。
很好的是,Scrapy提供了 命令行工具(Command line tool),通过这套工具,开发者可以轻松建立 Scrapy项目,而不仅仅是一个一个的Spider程序。
初见Scrapy命令行工具
先说几个使用过的Scrapy命令行工具中的命令:
-scrapy startproject
创建一个新的爬虫项目,语法如下:
scrapy startproject <project_name> [project_dir]
-scrapy genspider
在当前目录下创建一个爬虫程序(重名了会怎样?待试验),语法如下:
scrapy genspider [-t template] <name> <domain>
其中,template可以为basic、crawl、csvfeed、xmlfeed,默认是basic,其它三个尚未用过。
爬虫程序的name需要是一个合法的Python标识符(说法不太准确,需要更正),domain是需要爬取的网址的域名,会出现在爬虫的allowed_domains属性中,还会影响到爬虫的start_urls属性。
注意:domain中不能有http://、https://,仅仅是域名,不包含协议部分(犯过错误)。
疑问:domain是否可以设置多个呢?(需验证)
下面是第一次创建Spider时犯错了:

下图的start_urls中以两个http://开头!

执行爬虫程序时发生DNSLookupError!

注意,默认是给domain添加http://,那么,https网站还得手动更改?
更正代码后——删除allowed_domains和start_urls中多余的http://,爬虫程序可以正常执行。
-scrapy runspider
在没有使用scrapy startproject之前,自己写一个爬虫程序——没有项目的概念,此时,使用runspider命令来执行,因此,此命令时全局的(Global)。
语法如下:参数是 Python文件
scrapy runspider <spider_file.py>
-scrapy crawl
在创建的Scrapy项目中执行爬虫程序,依托于项目,此命令并非全局的。
语法如下:参数是 爬虫项目 内的 爬虫的 name,即在genspider时使用的name。
scrapy crawl <spider>
之前还会把runspider和crawl搞混,现在不会了。
----
上面就是几个自己常用的命令,本文后面会对其它命令进行简单介绍。
Scrapy命令行工具运行机制
Scrapy命令行工具运行时,会寻找一个配置文件,此文件命名为scrapy.cfg。在使用startproject建立爬虫项目时,此文件出现在爬虫项目的根目录下。
不过,scrapy.cfg不仅仅会出现在这里,见官文的截图(不再赘述):

对于1,但孤的Windows系统没有c:scrapy目录,更没有下面的scrapy.cfg了,需要自己建立吗?
对于2,也没有在用户根目下发现.scrapy.cfg文件;
看来,只有3——Scrapy项目的根目录下的scrapy.cfg是有效的了。
除了配置文件外,Scrapy命令行工具还可以下面三个环境变量配合使用:
-SCRAPY_SETTINGS_MODULE
-SCRAPY_PROJECT
-SCRAPY_PYTHON_SHELL
默认是打开标准的Python控制台(配置值为python,),可以将其配置为ipython(Scrapy推荐)、bpython,代表其它两个Python版本。
scrapy项目的默认结果如下(截图自官文的Tutorial文档):

其中,scrapy.cfg文件的内容格式如下:
[settings]
default = myproject.settings
上面的myproject表示项目名称,在上图的tutorial项目中,其为tutorial。这句表示,配置默认是tutorial目录下的settings.py文件的配置(请参考官文Settings)。
scrapy命令行工具用法
-直接输入scrapy 或 输入scrapy -h,显示scrapy的用法信息;
-输入scrayp <command> -h,显示子命令的用法信息;
-命令分为两种:项目命令(Project-specific commands)、全局命令(Global commands),前者只能在Scrapy项目中使用(有效),后者无论在哪里使用都有效。需要注意的是,某些命令在项目外执行和项目里面执行时是有区别的,比如,全局命令fetch,(省略若干字,还没弄清楚,请参考官网先)。
-全局命令 如下
startproject, genspider, settings, runspider, shell, fetch, view, version
-项目命令 如下
crawl, check, list, edit, parse, bench
更多Scrapy命令介绍
全局命令
-settings
获取Scrapy的配置,语法:
scrapy settings [options]
示例见官文。
-shell
重要!
语法如下:
scrapy shell [url]
基于参数url打开一个Scrapy shell,如果没有url参数,直接打开一个Scrapy shell。
也支持UNIX风格的本地文件路径,但是,相对路径必须用 ./或../ 开头,或者使用绝对路径,只是文件名是不行的。
开发者可以使用Scrapy shell来验证自己抓取数据的规则是否正确,熟练使用后,可以更高效进行Scrapy项目开发。
没有使用url打开后的示例:

-fetch
未使用过。语法如下:
scrapy fetch <url>
使用Scrapy下载器下载给定的url并把内容写到标准输出。
可以通过配置项指定爬虫程序。
更多消息见官文。
-view
用浏览器打开给定的链接。
-version
查看Scrapy版本,加-v查看Python、twisted和平台相关信息。
项目命令
-check
重要!
和Scrapy项目的测试有关!
需要深入学习!
尚未使用过,请参考官文Spiders Contracts。
0703-1124更新:
今天看了官文Spiders Contracts,这个命令用于方便地测试爬虫程序。
在爬虫程序的docstring中定义好contracts后,就可以使用check命令对contracts中规则进行检查了。
默认有三个contracts,开发者也可以定制开发。
-list
显示当前Scrapy项目可用的 爬虫。
-edit
编辑指定的爬虫程序。
经过测试,在Windows上未能打开IDLE,和孤是在virtualenv中操作有关系吗?
Linux上是用vi打开(vim?)。
-parse
未使用过。语法如下:
scrapy parse <url> [options]
获取给定的URL,并用处理它的spider(--callback或-c指定解析函数)解析它的响应。
此函数有很多配置项,请查阅官文。
07-02更新:
刚刚在官文Debugging Spiders中看到了parse的使用示例,调试的时候用。
在scrapy parse命令中使用--spider指定爬虫程序、-c指定解析程序、-d指定爬取深度,可以逐层展现指定爬虫、指定解析程序的数据爬取结果。
测试发现,其对一些https开头的网页爬取失败了,比如,https://www.baidu.com(还测试了https://docs.scrapy.org,也失败了):

网易首页是HTTP的,没有使用--spider、-c、-d选项,执行结果如下:Scraped Items是爬取结果,Requests是请求(一个GET请求)。

-bench
运行一个benchmark,官文Benchmarking,还没用过,
上面标记了“重要”的都需要达到【精通】的级别,当然,更需要熟悉CSS选择器和XPath。
定制项目命令
看清楚,是定制 项目命令!
全局命令就固定那几个了,但开发者可以定制项目命令,可以很久很久都不会用到吧,不再深入介绍。
后记
还有不少命令的用法不是很熟悉,还需要更加多地实践和理解;
-版本1.0:2018-06-30 22:56
写完后感觉好多命令不是很熟悉啊!还得多练习。后面更熟练了,再进行补充。
目前认为两个命令最重要:shell、check。
其实,这篇文章写的有些乱,因为自己不是精通Scrapy命令行工具吧!日后真的需要完善才行!
当然,孤以为文中还是提供了一些初级的、有价值的信息的。
Scrapy命令行工具简介的更多相关文章
- openssl命令行工具简介 - 指令x509
原文链接: http://blog.csdn.net/allwtg/article/details/4982507 openssl命令行工具简介 - 指令x509 用法: open ...
- Python -- Scrapy 命令行工具(command line tools)
结合scrapy 官方文档,进行学习,并整理了部分自己学习实践的内容 Scrapy是通过 scrapy 命令行工具进行控制的. 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分. 对 ...
- 使用Scrapy命令行工具【导出JSON文件】时编码设置
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 使用scrapy命令行工具建立了爬虫项目(startproject),并使用s ...
- 二、Scrapy命令行工具
本文转载自以下链接:https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/commands.html Scrapy是通过 scrapy 命令行工具 ...
- openssl命令行工具简介 - RSA操作
原文链接: http://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html 首先介绍下命令台下openssl工具的简单使用: ...
- Scrapy学习篇(二)之常用命令行工具
简介 Scrapy是通过Scrapy命令行工具进行控制的,包括创建新的项目,爬虫的启动,相关的设置,Scrapy提供了两种内置的命令,分别是全局命令和项目命令,顾名思义,全局命令就是在任意位置都可以执 ...
- Scrapy 1.4 文档 05 命令行工具
在系统命令行中,使用 scrapy 命令可以创建工程或启动爬虫,它控制着 Scrapy 的行为,我们称之为 Scrapy 命令行工具(command-line tool)或 Scrapy 工具(Scr ...
- 爬虫:Scrapy2 - 命令行工具
Scrapy 是通过 scrapy 命令行工具进行控制的. 这里我们称之为 “Scrapy tool” 以用来和子命令进行区分.对于子命令,我们称为 “command” 或者 “Scrapy comm ...
- Scrapy系列教程(1)------命令行工具
默认的Scrapy项目结构 在開始对命令行工具以及子命令的探索前,让我们首先了解一下Scrapy的项目的文件夹结构. 尽管能够被改动,但全部的Scrapy项目默认有类似于下边的文件结构: scrapy ...
随机推荐
- BZOJ2217 [Poi2011]Lollipop 【贪心】
题目链接 BZOJ2217 题解 如果只判定存不存在方案的话,我倒是想到可以将\(2\)拆成两个\(1\),其中一个不能作为区间开头,线段树优化计算补集方案数 但是一看这道题要输出方案啊,,, 怎么办 ...
- 如何在 Android 程序中禁止屏幕旋转和重启Activity
禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android ...
- bzoj2757【scoi2012】Blinker的仰慕者
题目描述 Blinker 有非常多的仰慕者,他给每个仰慕者一个正整数编号.而且这些编号还隐藏着特殊的意义,即编号的各位数字之积表示这名仰慕者对Blinker的重要度. 现在Blinker想知道编号介于 ...
- C#线程篇---解答线程之惑(2)
我们都知道,在这个行业,追求的就是用最少的时间学最多的知识,这是我写这个系列最想达到的目标,在最快的时间内,帮助更多的人学习更多的线程知识. 前一篇,讲述了线程基础,给大家铺垫了一个基础,这一篇着重介 ...
- struts的问题
将SSH框架进行整合的时候,将三者的jar包加入到lib下面,然后测试struts,结果页面显示不出来报404错误,可是路径没有问题 找到罪魁祸首是:原因两个:(1)在未用到spring的时候,先不要 ...
- linux tmux命令小结
http://note.youdao.com/noteshare?id=f1be507b4be27e53684b46a1424746b5
- Docker Swarm 服务编排之命令
一.简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理.同样在Swarm集群中,可以使用docker stack 将一组相关联的服 ...
- Struts2框架基础概念总结
一.struts2框架 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的 ...
- GC的时机
说到JVM,GC(垃圾回收)是非常重要的机制. 那么首先的问题是: GC在什么时候会发生? GC的触发包括两种情况:1.程序调用System.gc()的时候.2.系统自身决定是否需要GC. 系统进行G ...
- np.isin判断数组元素在另一数组中是否存在
np.isin用法 觉得有用的话,欢迎一起讨论相互学习~Follow Me np.isin(a,b) 用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状 ...