scrapy_redis更新下载:https://github.com/rmax/scrapy-redis
进入页面后,复制源码链接然后使用Git,通过git clone命令clone到本地:
1.修改settings.py
# 使用scrapy_redis的去重类,不使用scrapy默认的去重类
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy_redis的调度器,不使用scrapy默认的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 控制爬虫是否允许暂停
SCHEDULER_PERSIST = True
# 队列形式 先进先出 哪个请求先放到请求队列里面,哪个请求就先执行
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
# 栈形式 先进后出
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
ITEM_PIPELINES = {
'jobbole.pipelines.JobbolePipeline': 10,
# 使用redis数据库所要添加的管道,如果使用redis数据库,必须添加
'scrapy_redis.pipelines.RedisPipeline': 20
}
# 域名为字符串,端口为数字
# 如果不写,默认为本机数据库的IP
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# 限制爬虫速度,防止访问过快导致IP被禁
DOWNLOAD_DELAY = 1
2.spider.py(爬虫文件)
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
# 由于下边的类需要继承自RedisCrawlSpider,所以这里需要引入
from scrapy_redis.spiders import RedisCrawlSpider
class MyCrawler(RedisCrawlSpider):
"""Spider that reads urls from redis queue (myspider:start_urls)."""
name = 'mycrawler_redis'
# start_urls是由master推到队列中,所以这里不写start_urls
# 类名: + start_urls 推荐写法,标准写法
redis_key = 'mycrawler:start_urls'
# 制定允许爬虫的范围
rules = (
# follow all links
# follow 是否继续执行后面的内容,如果有回调函数,则默认为false,反之为true
Rule(LinkExtractor(), callback='parse_page', follow=True),
)
def parse_page(self, response):
print(response.url)
3.修改完上面两个文件之后,打开一个cmd窗口输入redis-server redis.windows.conf打开redis服务端
scrapy crawl mycrawler_redis 运行爬虫程序.在cmd窗口中,出现下面这句话,则说明成功,
爬虫文件正在监听redis数据库,一旦有request进入队列,就会执行.
Telnet console listening on 127.0.0.1:6023
4.打开一个新的cmd窗口,输入redis-cli连接服务端.输入下面的命令将url推到redis队列中.
lpush mycrawler:start_urls https://XXXX
5.运行之后可以看到,爬虫文件接受到request之后,开始访问数据,并且将数据返回给服务端的redis数据库
附:创建单机爬虫的命令式
scrapy genspider -t XXX XXX.com