第一步 下载scrapy模块:
pip install scrapy-redis
第二步 创建项目
在终端/cmd进入创建项目的目录:
cd 路径:
scrapy startproject douban(项目名)
导入到pycharm中
第三步 创建爬虫类
1.在terminal中进入项目中的spiders目录:
输入scrapy genspider douban_spider movie.douban.com(爬虫,爬取域的范围)
第四步 设置
非分布式爬虫设置:
1.将ROBOTSTXT_OBEY = True 改为 False
2.打开管道:
ITEM_PIPELINES = { 'JD_redis.pipelines.JdRedisPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400, # 分布式爬虫中添加 }
3.打开该设置并修改:
DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" }
4 .添加下面设置
# 使用去scrapy-redis里的重组件,不使用scrapy默认的去重方式 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis里的调度器组件,不使用默认的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 允许暂停,redis请求记录不丢失 SCHEDULER_PERSIST = True # 默认的scrapy-redis请求队列形式(按优先级) SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue" #指定redis数据库的连接参数 REDIS_HOST = '127.0.0.1' REDIS_PORT = 6379
第五步 编写项目(在原来的非分布式爬虫项目中修改)
1.修改spider文件:
原来的文件是:
import scrapy from JD.items import JdItem class BookSpider(scrapy.Spider): name = 'book' # allowed_domains = ['jd.com','p.3.cn'] start_urls = ['https://book.jd.com/booksort.html']
修改为:
import scrapy from scrapy_redis.spiders import RedisSpider from JD.items import JdItem class BookSpider(scrapy.Spider): name = 'book' allowed_domains = ['jd.com','p.3.cn'] # start_urls = ['https://book.jd.com/booksort.html'] redis_key = 'book:start_urls' # book可以自己随意取 只修改了两个地方,一个是继承类:由scrapy.Spider修改为RedisSpider 然后start_url已经不需要了,修改为:redis_key = "xxxxx",其中,这个键的值暂时是自己取的名字, 一般用项目名:start_urls来代替初始爬取的url。由于分布式scrapy-redis中每个请求都是从redis中取出来的,因此,在redis数据库中,设置一个redis_key的值,作为初始的url,scrapy就会自动在redis中取出redis_key的值,作为初始url,实现自动爬取.
2.运行:
在命令中输入: scrapy runspider douban_spider.py(爬虫文件名)
3来到redirs客户端中,输入初始url
lpush books:start_urls https://book.jd.com/booksort.html