创建Scrapy项目
与Scrapy项目相比,Scrapy-Redis只是替换了一些组件,以实现分布式爬虫。因此,我们可以先创建一个Scrapy项目,然后在项目中添加Scrapy-Redis组件的配置,再使用这些新的组件进行开发。接下来,我们借用前面的案例(某网站的讲师信息),介绍如何一步步将Scrapy项目转换成Scrapy-Redis项目,在此过程中对Scrapy-Redis的基本使用进行讲解。
首先创建一个Scrapy项目。打开终端,切换目录至D:\PythonCode,并输入如下命令:
scrapy startproject mySpider
运行上述命令,在指定的目录下可以看到mySpider项目。为了方便管理,同样在PyCharm中打开该项目,创建好的文件和目录结构如图1所示。
图1 项目的文件结构
上述项目的settings.py文件中,默认定制了各个Scrapy组件的行为。我们需要在这个基础上,增加对Scrapy-Redis组件的制定,主要设置内置包括:
- DUPEFILTER_CLASS
用于检测和过滤重复请求的类,默认为“scrapy.dupefilters.RFPDupeFilter”。这里,必须使用Scrapy-Redis的去重组件,交由Redis数据库执行去重操作,该项目设置示例如下:
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
- SCHEDULER
用于爬取网页的调度程序。这里,需要使用Scrapy-Redis的调度器,交由Redis分配请求,具体设置示例如下:
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
- SCHEDULER_PERSIST
表示是否在Redis中保持用到的队列。这里,无需清理Redis中使用的队列,允许项目在执行中暂停和暂停后恢复,此项目设置为:
SCHEDULER_PERSIST = True
- ITEM_PIPELINES
包含要使用的项目管道及其顺序的字典,默认为空。这里,需要将Item数据直接存到Redis数据库中,以供后续的分布式处理这些Item数据,所以可将此项目设置为:
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 100
}
若不想让Item数据保存到Redis数据库中,则可以自己编写管道文件,将数据传递到管道中处理。
- REDIS_HOST和REDIS_PORT
表示Redis服务器的主机IP地址和端口,默认读取的是本机的Redis数据库。这里,需要明确指出读取哪个主机的Redis服务,以下是该设置项的样例:
REDIS_HOST = '192.168.64.99'
REDIS_PORT = 6379