1.修改 spider 脚本
当使用 scrapy_redis 实现分布式爬虫时,需要将 spider 脚本中的类继承修改为scrapy_redisspiders.RedisSpider,同时设置初始 URL 列表在 Redis 数据库中的键值为“BaiduSpider;start urls”,故按如下修改newspy 文件。
2. 添加自动停止 spider 扩展
在Scrapy-Redis框架中,当 Reids 数据库中存储的共享爬取队列的 Request 为空时,程序还会一直运行,不会自动停止。这种情况下,可以自定义自动停止 spider 扩展,通过scrapy的spider_idle 信号 (spider idle 信号只有在共享爬取队列为空时才会被触发,触发间隔为5s)计算共享爬取队列为空的时间,实现根据设置的空闲时间来停止爬虫程序。本案例中,将自动停止spider扩展封装成extensions.py 文件,放入 BaiduSpider 项目的 settings.py 文件的同级目录中。
3.修改 settings 中设置
(1)启动自动停止 spider 扩展,并设置共享爬取队列空闲时间为6个 spider idle 信号触发时间(30s)。
EXTENSIONS=('
BaiduSpider.extensions,SpiderOpenCloseLogging': 540,
)
EXTEN_ITEMCOUNT = 6
(2) 替换 Scrapy的 Scheduler,使用 scrapy_redis 模块中的调度器统一调度。
SCHEDULER ='scrapy_redis.scheduler.Scheduler'
(3)使用 scrapy_redis 去重。
DUPEFILTER CLASS = 'scrapyredis.dupefilter.RFPDupeFilter'
(4)设置 Redis 的连接信息,包括连接地址 (安装 Redis 数据库计算机的 IP 地址)和端口(6379)。
REDIS_URL='redis://192.168.1.104:6379'
(5)设置 Redis 队列是否保存。默认设置为 False,如果设置为 True,则 scrapy_redis不会清空 Redis 里的去重队列和请求队列,它们会一直保存在 Redis 数据库中,用户可以暂停和启动爬生程序而不影响继续去重。
DUPEFILTER PERSIST = True
(6)配置存储数据库。搭建一个 MongoDB 服务(确保计算机已经安装 MongoDB数据库),将两台计算机爬取结果存储到同一个 MongoDB 数据库中。
MONGO URI =192.168.1.104'MONGO DB =baidu!
4.配置 Redis 数据库
scrapy-redis 分布式爬虫需要远程连接 Redis 数据库,读取共享爬取队列。配置 Redis数据库的过程为:打开 Redis 安装目录 (如 C:Program FileslRedis)下的 redis.windows-service.conf 文件,修改“bind”参数为“0.0.0.0”,以允许远程连接 Redis数据库,然后重启 Redis 服务。
5.设置远程连接 MongoDB 数据库
打开MongoDB 数据库安装目录(如C:Program FilesMongoDB\Serverl4.2bin)下的mongod.cg文件,修改“bindIp”参数为“0.0.0.0”,以允许远程连接MongDB数据库,然后重启MongoDB 服务。
以管理员身份打开命今提示符窗口,输入“netsh advfirewall firewall addrulename ="MongoDB"dir-in localport-27017 protocol=tcp action=allow”命令,按回车键,在Windows 的防火墙中添加端口入站规则,如果返回“确定”,表示添加成功。