0. 基本环境说明
- 本文截图及运行环境均在Win8上实现(是的,我放假回家了,家里的机器是win8的没有办法),但基本步骤与win 7环境基本相同。(应该把~)ps:我后来换了台win7的电脑,所以这篇文章的环境是win8和win7的结合体~,哇哈哈~,然而这并没有什么卵用~
- scrapy版本为1.0.3
- 这篇文章基本就是很无耻的翻译了一下官方文档顺便添加了一点自己的理解
- 参考文献以及下载链接:
- 喜欢的就点推荐+收藏把~这样我会把我知道的都写出来的,哇哈哈~
- 我用的操作系统是64位的,但是python用的是32位的,因为32位的包比较全,但是我最近在往64位的服务器上移植,到时候有问题我会及时添加的。
1. scrapy的shell命令详解
1.1 命令概览
首先可以通过以下命令来查看所有scrapy可用的命令类型:
1 |
scrapy -h |
scrapy目前的命令可以分为项目命令和全局命令两大类,共14种(嗯 ,我认真的数了两遍),分布也极其对称,项目级命令7种全局命令7种(嗯,我又认真的数了一遍)。
分别是:
全局命令
- startproject
- settings
- runspider
- shell
- fetch
- view
- version
项目命令
- crawl
- check
- list
- edit
- parse
- genspider
- bench
哇哈哈,然我们接着开始一一学习一下这些命令吧,有些命令好用的不要不要的哦~
1.2 全局命令解析
1.2.1 startproject 创建项目命令
- 基本语法:
scrapy startproject
- 是否需要项目存在:当然是不需要咯~
其实这个命令我们在之前的教程当中也用过了,应该不陌生,就是在创建一个名为project_name
的爬虫框架,供我们调教(猥琐脸)。是创建爬虫项目开天辟地的第一步哟~。
用例
1 2 |
scrapy startproject njupt #嗯,我无耻的修改了官方的例子,在运行命令行的目录下面创建了一个名为njupt的文件夹,里面存放了一个名为njupt的scrapy框架 |
1.2.2 settings 查看配置文件参数命令
- 基本语法:
scrapy settings [options]
- 是否需要项目存在:当然是不需要咯~(这是官方写的,貌似有点问题)
嘛这个命令是用来查看项目参数的。官方文档说不需要项目,经过本人测试,如果在项目目录下,就会显示出项目的settings.py
里面对应的项目的内容,如果实在项目目录之外,貌似会返回一个scrapy的默认值,我个人建议大家在项目目录下使用这个命令来查看settings.py
里面的内容就ok了。
用例
1 |
scrapy settings --get BOT_NAME |
1.2.3 runspider 运行爬虫命令
- 基本语法:
scrapy runspider
- 是否需要项目存在:当然是不需要咯~
貌似这个命令是不依托一个scrapy
项目而直接运行一个爬虫的命令。弱弱的说一句,这种没有settings
没有pipelines
的爬虫真的好么
用例
1 |
scrapy runspider njupt.py |
1.2.4 shell 创建一个shell环境用于调试response的命令(很重要!!!)
- 基本语法:
scrapy shell [url]
- 是否需要项目存在:当然是不需要咯~
这个命令真的很重要啦~,主要目的是创建一个shell环境用于调试response的命令(嗯,和标题一模一样),因为她太重要了,所以我临时决定回来专门写一篇文章来介绍这个命令,迫不及待的同学去翻官方文档吧~(其实我是累了,因为我一边码字一遍在重装电脑而且现在也半夜十二点多了~说好的早睡又泡汤的)
用例:
1 |
scrapy shell http://www.njupt.edu.cn |
1.2.5 fetch 显示爬取过程
- 基本语法:
scrapy fetch [url]
- 是否需要项目存在:貌似有没有都行
这个命令其实是在标准输出中显示调用一个爬虫来爬取指定的url的全过程。
要注意的一点是,如果是在一个项目目录下使用这个命令则会默认调用这个项目当中的爬虫,如果在项目目录之外使用这个命令,则会调用scrapy默认的爬虫来爬取。所以有没有项目存在都能运行。
用例:
1 2 |
scrapy fetch http://www.njupt.edu.cn #会显示抓取的过程,以及抓取的html的内容 |
1 2 3 4 |
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打开就是啦~。原始地址就在浏览器的地址栏里哦~
用例:
1 2 |
scrapy view http://item.jd.com/1319191.html #嗯,我背叛了大njupt,因为我们学校的网站太牛X没有使用ajax,所以我就用大JD做例子了。 |
1.2.7 version 显示版本信息
- 基本语法:
scrapy version [-v]
- 是否需要项目存在:无需项目存在
此命令很简单,就是显示scrapy的版本,如果加上-v
命令则还会显示Python, Twisted和平台的信息,貌似对于bug寻找和报告很有帮助!
1.3 项目命令解析
1.3.1 genspider 通过模板生成爬虫
- 基本语法:
scrapy genspider [-t template]
- 是否需要项目存在:项目命令嘛,果断需要~
这个命令主要是帮助我们在编写多个爬虫的时候,利用现有爬虫来快速生成新的爬虫,当然这不是唯一创建新爬虫的方式,骚年,不嫌累的话可以自己重新敲一个~
用例:
1 |
scrapy genspider -l |
通过添加参数-l
来查看现有的爬虫模板
1 |
scrapy genspider -d basic |
通过添加参数-d
和模板名称来查看现有模板的内容,嘛如果实在linux环境下会比较好用,我等在win下面混的菜鸟还是右键用sublime来查看内容吧
1 |
scrapy genspider -t basic example example.com |
这就是激动人心的生成爬虫的方式了,通过参数-t
后面紧接着的内容是模板名称
新爬虫的名称
新爬虫允许爬取的域名
,貌似一般爬虫名称基本都是域名主体呢~,聪明的同学也知道这里新爬虫名称
新爬虫允许爬取的域名
分别对应的就是之前上一篇教程提到的name
和allowed_domains
这两个参数咯。
1.3.2 crawl 启动爬虫命令
- 基本语法:
scrapy crawl
- 是否需要项目存在:项目命令嘛,果断需要~
这个命令是很激动人心的,每次写完爬虫就迫不及待的一试,大家在上篇教程中想必也已经实验过了。不过貌似一次只能跑一个爬虫,想运行多个爬虫怎么办呢?我现在想到的两个解决方案
1.自己写一个bat或者shell脚本
2.自己添加一个scrapy的shell命令(没错,听起来屌飞了,我会在以后的教程中告诉你怎么做的,想看的以后的教程,哼哼~,我才不会请你点推荐加收藏呢~)
用例:
1 |
scrapy crawl njupt #咩哈哈,启动njupt爬虫吧骚年~ |
1.3.3 check 检查爬虫完整性
- 基本语法:
scrapy check [-l]
- 是否需要项目存在:项目命令嘛,果断需要~
这个命令官方写的是Contect检查然后就没了,我在win7下面试了一下,能检查出一部分错误,但是后面加一个-l
参数貌似没什么用啊,没有显示出官方文档例子里面的spider列表和函数列表,倒是有一堆warning
,我回来研究研究一下源码看看把,这个命令目前就是检查一些语法、import
和warning
等错误,逻辑错误肯定是查不出来的啦~
用例:
1 |
scrapy check njupt |
1.3.4 list 查看爬虫列表命令
- 基本语法:
scrapy list
- 是否需要项目存在:项目命令嘛,果断需要~
这个命令就是查看一下这个项目里面目前有哪些爬虫~,写了很多的爬虫之后打这个命令有一种阅兵的快感呢~,一般linux环境下使用较多~
用例:
1 |
scrapy list |
1.3.5 edit 编辑爬虫命令
- 基本语法:
scrapy edit
- 是否需要项目存在:项目命令嘛,果断需要~
典型的在linux里面用的高大上命令啊,输入此命令可以立刻调取settings.py
中的editor
指定的编辑器来打开爬虫进行编辑(是的,settings.py
里面还能配这么屌的参数我也很震惊)。顺便说一句我的win7系统运行之后直接报错…伤心啊
用例:
1 |
scrapy edit 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
: 显示被爬取的每层的相关信息
用列:
1 |
scrapy parse http://www.njupt.edu.cn |
1.3.7 bench 硬件测试命令
- 基本语法: scrapy bench
- 是否需要项目存在:不需要
这个命令我个人理解就是对你的硬件做一个爬虫的压力测试,看看不考虑网络的情况下你的硬件究竟能将这个爬虫运行的多快。当然这个有点理论速度的味道,实际上你爬起来不可能这个么快。姑且算是告诉你硬件的瓶颈的方法吧。不过我win7上运行了貌似没有什么用,没有出现官方说好的各种参数,回来有空还要仔细研究一下啊。
用例:
1 |
scrapy bench |
我终于写完了,喜欢的就收藏+推荐一下吧,这样我就会更有动力写新的教程了,哇哈哈~