1.1命令概览
scrapy <command> [options] [args]
项目命令:
crawl 运行一个 spider
edit 编辑 spider
bench 运行快速的基准测试
check 检查spider contracts
genspider 使用预定义的模板生成新的spider
list 可用spiders列表
parse 使用spider解析URL并打印结果
全局命令:
fetch Fetch a URL using the Scrapy downloader
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
1.2 全局命令解析:
1.2.1 startproject 创建项目命令
基本语法:scrapy startproject
是否需要项目存在:当然是不需要咯~
其实这个命令我们在之前的教程当中也用过了,应该不陌生,就是在创建一个名为project_name的爬虫框架,供我们调教(猥琐脸)。是创建爬虫项目开天辟地的第一步哟~。
用例
scrapystartproject njupt#嗯,我无耻的修改了官方的例子,在运行命令行的目录下面创建了一个名为njupt的文件夹,里面存放了一个名为njupt的scrapy框架
1.2.2 settings 查看配置文件参数命令
基本语法:scrapy settings [options]
是否需要项目存在:当然是不需要咯~(这是官方写的,貌似有点问题)
嘛这个命令是用来查看项目参数的。官方文档说不需要项目,经过本人测试,如果在项目目录下,就会显示出项目的settings.py里面对应的项目的内容,如果实在项目目录之外,貌似会返回一个scrapy的默认值,我个人建议大家在项目目录下使用这个命令来查看settings.py里面的内容就ok了。
用例
scrapy settings --getBOT_NAME
1.2.3 runspider 运行爬虫命令
基本语法:scrapy runspider
是否需要项目存在:当然是不需要咯~
貌似这个命令是不依托一个scrapy项目而直接运行一个爬虫的命令。弱弱的说一句,这种没有settings没有pipelines的爬虫真的好么
用例
scrapyrunspider njupt.py
1.2.4 shell 创建一个shell环境用于调试response的命令(很重要!!!)
基本语法:scrapy shell [url]
是否需要项目存在:当然是不需要咯~
这个命令真的很重要啦~,主要目的是创建一个shell环境用于调试response的命令(嗯,和标题一模一样),因为她太重要了,所以我临时决定回来专门写一篇文章来介绍这个命令,迫不及待的同学去翻官方文档吧~(其实我是累了,因为我一边码字一遍在重装电脑而且现在也半夜十二点多了~说好的早睡又泡汤的)
用例:
scrapy shell http://www.njupt.edu.cn
1.2.5 fetch 显示爬取过程
基本语法:scrapy fetch [url]
是否需要项目存在:貌似有没有都行
这个命令其实是在标准输出中显示调用一个爬虫来爬取指定的url的全过程。要注意的一点是,如果是在一个项目目录下使用这个命令则会默认调用这个项目当中的爬虫,如果在项目目录之外使用这个命令,则会调用scrapy默认的爬虫来爬取。所以有没有项目存在都能运行。
用例:
scrapyfetchhttp://www.njupt.edu.cn#会显示抓取的过程,以及抓取的html的内容
scrapy fetch--nolog --headers http://www.njupt.edu.com/#可以添加一些参数来,观察各种信息,如添加个:--nolog 可以忽略很多烦人的日志--headers 用来查看请求时的头部信息
1.2.6 view 查看页面内容命令
基本语法:scrapy view [url]
是否需要项目存在:无需项目存在
当你对于某些信息死也提取不出来的时候就要考虑使用一下使用这个view了,这个命令是给你下载一个页面并用浏览器打开,目的是让你对比一下scrapy"看到"的页面和你通过浏览器看到的页面有什么不同,这个对于某些动态生成的网页很有作用!但是这里有个坑大家注意一下,我在Win7环境下,使用这个命令的时候在下载对应网页的同时用浏览器打开(目测纯命令行无图形界面的Linux因该不会自动打开浏览器),此时里面的ajax因为有了浏览器打开,又被执行了,所以通过浏览器打开的页面应该和你正常访问的网页并无二致,但并不是真正scrapy看到的网页。如何看到真正的网页内?很简单啦,找到原始地址用sublime打开就是啦~。原始地址就在浏览器的地址栏里哦~
用例:
scrapyviewhttp://item.jd.com/1319191.html#嗯,我背叛了大njupt,因为我们学校的网站太牛X没有使用ajax,所以我就用大JD做例子了。
1.3 项目命令解析
1.3.1 genspider 通过模板生成爬虫
基本语法:scrapy genspider [-t template]
是否需要项目存在:项目命令嘛,果断需要~
这个命令主要是帮助我们在编写多个爬虫的时候,利用现有爬虫来快速生成新的爬虫,当然这不是唯一创建新爬虫的方式,骚年,不嫌累的话可以自己重新敲一个~
用例:
scrapygenspider -l
通过添加参数-l来查看现有的爬虫模板
scrapygenspider -d basic
通过添加参数-d和模板名称来查看现有模板的内容,嘛如果实在linux环境下会比较好用,我等在win下面混的菜鸟还是右键用sublime来查看内容吧
scrapygenspider -t basic example example.com
这就是激动人心的生成爬虫的方式了,通过参数-t后面紧接着的内容是模板名称新爬虫的名称新爬虫允许爬取的域名,貌似一般爬虫名称基本都是域名主体呢~,聪明的同学也知道这里新爬虫名称新爬虫允许爬取的域名分别对应的就是之前上一篇教程提到的name和allowed_domains这两个参数咯。
1.3.2 crawl 启动爬虫命令
基本语法:scrapy crawl
是否需要项目存在:项目命令嘛,果断需要~
这个命令是很激动人心的,每次写完爬虫就迫不及待的一试,大家在上篇教程中想必也已经实验过了。不过貌似一次只能跑一个爬虫,想运行多个爬虫怎么办呢?我现在想到的两个解决方案
1.自己写一个bat或者shell脚本
2.自己添加一个scrapy的shell命令(没错,听起来屌飞了,我会在以后的教程中告诉你怎么做的,想看的以后的教程,哼哼~,我才不会请你点推荐加收藏呢~)
用例:
scrapycrawl njupt#咩哈哈,启动njupt爬虫吧骚年~
1.3.3 check 检查爬虫完整性
基本语法:scrapy check [-l]
是否需要项目存在:项目命令嘛,果断需要~
这个命令官方写的是Contect检查然后就没了,我在win7下面试了一下,能检查出一部分错误,但是后面加一个-l参数貌似没什么用啊,没有显示出官方文档例子里面的spider列表和函数列表,倒是有一堆warning,我回来研究研究一下源码看看把,这个命令目前就是检查一些语法、import和warning等错误,逻辑错误肯定是查不出来的啦~
用例:
scrapychecknjupt
1.3.4 list 查看爬虫列表命令
基本语法:scrapy list
是否需要项目存在:项目命令嘛,果断需要~
这个命令就是查看一下这个项目里面目前有哪些爬虫~,写了很多的爬虫之后打这个命令有一种阅兵的快感呢~,一般linux环境下使用较多~
用例:
scrapylist
1.3.5 edit 编辑爬虫命令
基本语法:scrapy edit
是否需要项目存在:项目命令嘛,果断需要~
典型的在linux里面用的高大上命令啊,输入此命令可以立刻调取settings.py中的editor指定的编辑器来打开爬虫进行编辑(是的,settings.py里面还能配这么屌的参数我也很震惊)。顺便说一句我的win7系统运行之后直接报错...伤心啊
用例:
scrapyedit njupt
1.3.6 parse
基本语法:scrapy parse [options]
是否需要项目存在:项目命令嘛,果断需要~
这方法适合测试自己写的spider和后续各种组建如:pipeline等组合使用的情况,我一般用来测试自己编写的spider(在没有见过这个命令之前我一直是用crawl命令来测试的...悲剧啊)。
支持的参数倒是蛮丰富的:
--spider=SPIDER: 没有指定spider的情况下其程序搜索,用这个选项可以强行指定某个spider
--a NAME=VALUE: 用来设定spider需要的参数,可以多个
--callback或-c: 指定spider里面用于处理response的函数,没有强行制定的话,默认使用parse函数
--pipelines:用来指定后续的pipelines,可以灵活定制哦~
--rules或-r: 通过CrawlSpider设定的规则来选取对应的函数当作解析response的回调函数
--noitems: 不显示抓取的items
--nolinks: 不显示提取的链接
--nocolour: 输出的结果不要高亮显示(这个选项还是不要用得好)
--depth或-d: 设置爬取深度,默认为1哦~
--verbose或-v: 显示被爬取的每层的相关信息
用列:
scrapy parse http://www.njupt.edu.cn
1.3.7 bench 硬件测试命令
基本语法: scrapy bench
是否需要项目存在:不需要
这个命令我个人理解就是对你的硬件做一个爬虫的压力测试,看看不考虑网络的情况下你的硬件究竟能将这个爬虫运行的多快。当然这个有点理论速度的味道,实际上你爬起来不可能这个么快。姑且算是告诉你硬件的瓶颈的方法吧。不过我win7上运行了貌似没有什么用,没有出现官方说好的各种参数,回来有空还要仔细研究一下啊。
用例:
scrapybench