本篇带大家认识一下网络爬虫框架Scrapy。
什么是框架:
在建筑学概念中,框架是一个基本概念上的结构,用于去解决或者处理复杂的问题。通俗来说也就是一个有约束性的架子。
在我们计算机领域中,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。所以,Python的爬虫框架就是一些爬虫项目的半成品。
比如可以将一些常见爬虫功能的实现代码部分写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据需求去编写少量需要变动的代码,实现一个爬虫项目。
所谓的半成品并不是没有完善的复用代码,在框架中已经实现了很多要实现的常见功能,让我们可以高效的开发自己需要的爬虫项目。
认识Scrapy框架:
若想使用其他版本,例如: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参数可以控制不输入日志信息。可以通过下面操作,实现创建一个爬虫项目,并不输入项目信息。
scrapy startproject --nolog mypjt3
常用工具命令:
Scrapy中,工具命令分了两种,一种为全局命令,一种为项目命令。 全局命令不需要依靠Scrapy项目就可以在全局中直接运行,而项目命令必须要在Scrapy项目中才可以运行。1、全局命令: 其实我们可以在不进入Scrapy爬虫项目所在目录的情况下。运行scrapy -h 。在commands下出现所有得全局命令。如下:fetch命令:主要用来显示爬虫爬取的过程。 如果在Scrapy项目目录之外使用该命令。则会调用Scrapy默认的爬虫来爬取该页面信息。如果在Scrapy某个项目目录内使用该命令,则会调用该项目中的爬虫来爬取网页。 当然我们也可以在使用scrapy fetch -h的时候+上参数,比如显示头信息 --headers 和不显示日志信息 --nolog.
上面就是Scrapy中fetch命令的使用。通过fetch命名我们可以很方便的查看爬取某个网页的过程。
settings命令: 第三个全局命令了,settings命令可以查看Scrapy对应的配置信息。 如果在Scrapy项目目录内使用settings命令,查看的是对应的项目信息,如果在Scrapy项目目录外使用settings命令,查看的是Scrapy默认配置信息。 这些就是项目的配置信息。我们也可以在命令行中进入该项目所在的目录。比如我们可以通过下面指令来查看配置信息中BOT_NAME对应的值
scrapy settings --get BOT_NAME
shell命令: shell命令主要是可以启动Scrapy的交互终端。经常在开发以及调试的时候用到,使用Scrapy的交互终端可以在不启动Scrapy爬虫的情况下,对网站响应进行调试,同样,在该交互终端中,我们也可以写一些python代码进行响应测试 比如我们为爬取百度首页创建一个交互终端环境,并设置为不显示日志信息。如下所示: 可以看到,执行了该命令之后,会出现可以使用的Scrapy对象以及快捷命令,比如item,response,settings,spider等,并进入交互模式,在“>>>”后可以输入交互命令及代码。(ctrl+c退出交互模式)startproject命令: 第五个命令了。这个大家应该不陌生了,主要就是创建项目用。
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直接对爬虫项目进行管理和编辑。所以不多说这个了。有兴趣可以留言。