本篇文章带大家认识一下网络爬虫框架Scrapy。
什么是框架:
在建筑学概念中,框架是一个基本概念上的结构,用于去解决或者处理复杂的问题。通俗来说也就是一个有约束性的架子。
- 在我们计算机领域中,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。所以,Python的爬虫框架就是一些爬虫项目的半成品。
- 比如可以将一些常见爬虫功能的实现代码部分写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据需求去编写少量需要变动的代码,实现一个爬虫项目。
- 所谓的半成品并不是没有完善的复用代码,在框架中已经实现了很多要实现的常见功能,让我们可以高效的开发自己需要的爬虫项目。
认识Scrapy框架:
scrapy框架是一套比较成熟的python爬虫框架,是使用python开发的快速、高层次的信息爬取框架。
Scrapy框架的应用领域很多,比如网络爬虫开发、数据挖掘、数据监测。自动化测试等。
Scrapy的官网地址是: http://scrapy.org
看了这么绿的界面之后, 还是要讲一些枯燥的文字
首先是安装Scrapy
目前Scrapy已经支持python3了,所以我们在windows下直接pip install Scrapy 就可以安装最新版。但是首先要安装他的依赖包。
更新一下pip
接下来要安装Twisted模块。但是直接pip安装会报错的。如下图:
所以我们要先去这个地址下载。https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
然后根据python版本下载版本对应版本,我是python 3.6.4 我选Twisted-18.9.0-cp36-cp36m-win_amd64
下载下来后放在桌面,然后在桌面启动cmd(按着shift键 右击鼠标 然后选择 在此处打开命令窗口),输入pip install Twisted-18.9.0-cp36-cp36m-win_amd64.whl
再安装一个pywin32
最后直接pip
若想使用其他版本,例如:pip install Scrapy==1.1.0rc3
PS:
- 如果使用的anaconda,所以在安装的时候,直接切入到anaconda使用的环境目录scripts内,打开命令行: conda install scrapy 进行安装。(或者切入Anaconda图形界面下载)
然后在cmd里面输入Scrapy 有消息就成功啦!
创建第一个项目:
终于安装完成了。迫不及待想尝试下创建项目吧
First_Get是我这里的项目名称。(可用cmd进入要储存项目的文件夹)
可以看到这么一个东西。别着急先看一下这是什么。
我们在用命令生成一个项目的时候,会生成一个与爬虫项目名称同名的文件夹。比如此时我们的爬虫项目名称为First_Get,所以此时,会有一个名为First_Get的子文件夹,和一个scrapy.cfg文件。
该同名子文件夹里面放置的是爬虫项目的核心代码,scrapy.cfg文件主要是爬虫项目的配置文件。
该项目中同名子文件夹里放置的核心代码,一个spiders,一个__init__.py,items.py,pipelines.py,settings.py,等python文件。
init.py 文件是项目的初始化文件,主要写的是一些项目的初始化信息。主要对spiders进行初始化
items.py文件为爬虫项目的数据容器文件,主要用来定义我们要获取的数据信息。
pipelines.py文件为爬虫项目的管道文件,主要用来对items里面定义的数据进行进一步的加工与处理。
settings.py 文件为爬虫项目的甚至文件,主要为爬虫项目的一些设置信息。
spiders文件夹下放置的是爬虫项中的爬虫部分相关的文件。
修改项目参数:
接下来我们来开始第一个项目。进行Scarpy的爬虫项目管理。
首先我们用cmd命令CD到项目中
查看项目具体的参数。
我们可以对这些重要的参数分别进行分析。
–logfile=FILE 参数主要用来指定日志文件,其中的FILE为指定的日志文件的路径地址。
比如我们希望将日志文件储存在当前目录的上一层目录下,并且日志文件名为logf.txt.我们可以这样实现:
效果如下:
建立完成了。此时我们已经成功通过–logfile参数将对应的日志信息写入到了指定的文件夹中。
–loglevel=LEVEL,-L LEVEL参数主要用来控制日志信息的等级,默认为DEBUG模式。除了DEBUG等级之外,对应的等级还可以设置为其他的值,
CRITICAL | 发生最严重的错误 |
---|---|
ERROR | 发生了必须立即处理的错误 |
WARNING | 出现了一些警告 |
INFO | 输出一些提示信息 |
DEBUG | 输入一些调试信息。debug |
在这里我们要把日志等级设置为DEBUG最低级别。此时所有得调试信息都会输出出来。如果只是需要一些警告的日志信息,可以设置为WARRING
设置成功。
通过–nolog参数可以控制不输入日志信息。可以通过下面操作,实现创建一个爬虫项目,并不输入项目信息。
代码语言:javascript复制scrapy startproject --nolog mypjt3
以上就是一些Scrapy项目创建指令中常见重要参数,希望各位朋友可以全面掌握项目创建指令的使用,可以根据需求创建出自己的爬虫项目。
如果我们需要删除某个爬虫项目,我们可以直接删除对应的文件夹来实现。
常用工具命令:
Scrapy中,工具命令分了两种,一种为全局命令,一种为项目命令。
全局命令不需要依靠Scrapy项目就可以在全局中直接运行,而项目命令必须要在Scrapy项目中才可以运行。
1、全局命令:
其实我们可以在不进入Scrapy爬虫项目所在目录的情况下。运行scrapy -h 。在commands下出现所有得全局命令。如下:
fetch命令:主要用来显示爬虫爬取的过程。
如果在Scrapy项目目录之外使用该命令。则会调用Scrapy默认的爬虫来爬取该页面信息。如果在Scrapy某个项目目录内使用该命令,则会调用该项目中的爬虫来爬取网页。
当然我们也可以在使用scrapy fetch -h的时候 上参数,比如显示头信息 --headers 和不显示日志信息 --nolog.
代码语言:javascript复制scrapy fetch --headers --nolog http://news.sina.com.cn/
上面就是Scrapy中fetch命令的使用。通过fetch命名我们可以很方便的查看爬取某个网页的过程。
runspider命令:
通过Scrapy中的runspider命令我们可以实现不依托Scrapy的爬虫项目,直接运行一个爬虫文件。
首先我们先编写一个Scrapy爬虫文件如下:
仅此我们只需要简单的了解该爬虫文件,因为在后续的文章中我会讲解如何编写优质的爬虫文件。
如图该爬虫文件的名字为first,同时爬取的网址为http://www.baidu.com
然后我们可以使用runspider命令直接运行该爬虫文件。并将日志等级设置为INFO。
可以看到,通过该指令在不依靠Scrapy项目的情况下完成了爬虫文件的运行。
settings命令:
第三个全局命令了,settings命令可以查看Scrapy对应的配置信息。
如果在Scrapy项目目录内使用settings命令,查看的是对应的项目信息,如果在Scrapy项目目录外使用settings命令,查看的是Scrapy默认配置信息。
这些就是项目的配置信息。我们也可以在命令行中进入该项目所在的目录。比如我们可以通过下面指令来查看配置信息中BOT_NAME对应的值
代码语言:javascript复制scrapy settings --get BOT_NAME
shell命令:
shell命令主要是可以启动Scrapy的交互终端。经常在开发以及调试的时候用到,使用Scrapy的交互终端可以在不启动Scrapy爬虫的情况下,对网站响应进行调试,同样,在该交互终端中,我们也可以写一些python代码进行响应测试
比如我们为爬取百度首页创建一个交互终端环境,并设置为不显示日志信息。如下所示:
可以看到,执行了该命令之后,会出现可以使用的Scrapy对象以及快捷命令,比如item,response,settings,spider等,并进入交互模式,在“>>>”后可以输入交互命令及代码。(ctrl c退出交互模式)
startproject命令:
第五个命令了。这个大家应该不陌生了,主要就是创建项目用。
version命令:
通过version命令,可以直接显示Scrapy的版本相关信息。(加上-v 可以查看相关的其他版本信息)
view命令:
通过view命令,我们可以实现下载某个网页并用浏览器查看的功能。
比如我们可以通过下面命令下载网易新闻首页(http://news.163.com/)并自动用浏览器查看下载的网页。
2、项目命令:
全局命令也算差不多了。大家也经常回顾,下面开始介绍一些项目命令了。
可以先cd 进入一个项目内,然后输入scrapy -h查看所有得命令。出去我们之前说的全局命令,其他的就是项目命令了。
Bench命令:
主要是测试本地硬件的性能,当我们运行scrapy bench的时候,会创建一个本地服务,并且会以最大的速度爬行。所以我们要了解下本地硬件的性能,避免被其他因素影响。
可以看到,大概每分钟可以爬取2400个网页。虽然这只是目前的一个参考标准。在实际运行的时候,会由于各种因素导致速度不同,所以我们需要根据实际的速度来改进我们的项目
Genspider命令:
主要是来创建Scrapy爬虫文件。是一种快速创建爬虫文件的方式。
使用该命令可以基础现有的爬虫模板直接生成一个新的爬虫文件。同样,必须要爱Scrapy爬虫项目目录中。
可以用该命令的 -l 参数来查看当前可以使用的爬虫模板。
此时,可以基于其实任何一个爬虫模板来生成一个爬虫文件,比如我们可以使用basic模板来生成一个爬虫文件,格式为"scrapy genspider -t (模板) (新爬虫名) (新爬虫爬取的域名)"
自动生成为可执行文件:
Check命令:
这个命令跟名字很像,在爬虫中测试是一个很麻烦的事情,所以在Scrapy中使用合同(contract)的方式对爬虫进行测试。
而使用check命令,可以实现对某个爬虫文件进行合同(contract)检查。
比如要对刚生成的xixixi.py进行合同检查。我们可以使用: scrapy check 爬虫名 。 来实现,此时check后面的爬虫min,不是文件名,没有后缀的。
Crawl命令:
crawl命令可以来启动某个爬虫,启动格式是"scrapy crawl 爬虫名"
比如 scrapy crawl xixixi --loglevel=INFO
List命令:
通过Scrapy中的list命令,我们可以列出当前可以使用的爬虫文件。
比如我们现在在这个目录下,有1个可用文件
Edit命令:
通过edit命令,我们可以直接打开对应编辑器对爬虫文件进行编辑。在windows中我们一般使用Python IDE 或者Pycharm直接对爬虫项目进行管理和编辑。所以不多说这个了。有兴趣可以留言。
Parse命令:
parse命令使我们可以实现获取指定的URL网址,并使用对应的爬虫文件进行处理和分析。
比如我们可以使用"scrapy parse http://www.baidu.com"来获取百度首页,由于在这里没有指定的爬虫文件,也没有指定处理函数,所以此时会使用默认的爬虫文件和默认的处理函数,进行相应的处理。
我们可以使用 scrapy parse -h 来查看所有参数。
参数表我直接贴图了,码了10500 的字 贼辛苦q.q.
本篇文章到这里就先结束了。
本篇主要讲解了什么是爬虫框架,Python中的Scrapy框架,以及Scrapy框架的安装和Scrapy的目录结构,如何进行爬虫项目管理和一些常用的工具命令。
这些知识对我们后面的编写环节还是很重要的,希望在看的时候可以多回顾一下。
下一篇:开启Scrapy爬虫项目之旅