第一步 下载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