在CentOS中配置所有python运行环境:
如果Centos的yum源没有更改,修改为阿里云的yum源
安装所需要的环境
yum -y install gcc gcc-c++ kernel-devel
如果本地有安装anaconda也需要安装anaconda
导入项目中的包
在cmd中进入项目目录下执行以下命令
pip freeze > requirements.txt
会在项目目录下生成一个当前项目所使用的的环境的文本文件,传给爬虫服务器
在Centos中创建需要的Python虚拟环境
安装项目所需要的包
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
修改Scrapy项目变成Scrapy-redis项目:
- 将爬虫的类从scrapy.Spider变成scrapy_redis.spiders.RedisSpider;或者是从scrapy.CrawlSpider变成scrapy_redis.spiders.RedisCrawlSpider。

修改为

- 将爬虫中的start_urls删掉。增加一个redis_key=”xxx”。这个redis_key是为了以后在redis中控制爬虫启动的(通过key来读取URL)。爬虫的第一个url,就是在redis中通过这个发送出去的。

修改为

- 在配置文件中增加如下配置:
在settings.py中修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 确保所有爬虫共享相同的去重指纹(原先URL去重由scrapy自己去做,现在由scrapy-redis做) DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 设置redis为item pipeline,不需要去添加一个RedisPipeline,已经写好了直接调用即可 ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 300 } # 在redis中保持scrapy-redis用到的队列,不会清理redis中的队列,从而可以实现暂停和恢复的功能 # 暂停之后再恢复不会从头开始。 SCHEDULER_PERSIST = True # 设置连接redis信息 REDIS_HOST = '192.168.0.250' REDIS_PORT = 6379 # 设置密码 REDIS_PARAMS = { 'password': '123456', } |
启动爬虫:
爬虫服务器端:

进入项目的spiders文件夹下

通过scrapy runspider 爬虫名运行爬虫出现等待log
Redis服务器端:

爬虫启动,注意:fang:start_urls就是之前的redis_key

在Redis Desktop Manager中可以看到爬取成果
在redis中添加的三个键:
爬虫名:requests:调度器队列,存放的是待请求的requests对象,获取过程是一个pop操作即获取一个删除一个
爬虫名:items:存放获取到的item信息,在pipeline中开启RedisPipeline才会存入
爬虫名:dupeflter:指纹集合,存放的是已经进入调度器队列的requests对象的指纹,指纹默认由请求方法,url和请求体组成,指纹生成的方式hashlib.sha1()函数