1. 创建文件以及创建scrapy工程
scrapy startproject fbsPro
2. 进入工程,创建基于CrawlSpider的爬虫文件
scrapy genspider -t crawl fbs www.xxx.com
3. 修改当前爬虫文件
在fbs.py重新导包
from scrapy_redis.spiders import RedisCrawlSpider
- 将start_urls和allowed_domains进行注释
- 添加一个新属性:redis_key = 'sun' ,表示可以被共享的调度器队列的名称,直接将起始url放进队列来代替start_urls的功能
- 编写数据解析相关的操作
- 先编写allow正则表达式,再对response进行解析,在items中创建变量,在fbs.py继承管道并实例化传参
- 将当前爬虫类的父类修改成RedisCrawlSpider
修改settings.py,ROBOTSTXT_OBEY改为False,UA伪装换掉
指定使用可以被共享的管道:ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 400 }
指定调度器:
# 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis组件自己的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据 SCHEDULER_PERSIST = True
指定redis服务器
- redis相关操作配置:
- 配置redis的配置文件:
linux或者mac:redis.conf
windows:redis.windows.conf - 打开配置文件修改:
将bind 127.0.0.1进行删除
关闭保护模式:protected-mode yes改为no - 结合着配置文件开启redis服务
redis-server 配置文件 - 启动客户端:
redis-cli - 执行工程:
scrapy runspider xxx.py - 向调度器的队列中放入一个起始的url:
调度器的队列在redis的客户端中
lpush 队列名称(sun) www.xxx.com
爬取到的数据存储在了redis的proName:items这个数据结构中