基于scrapy-redis的分布式爬虫 2018-11-04

2018-11-05  本文已影响0人  Mr_Du_Biao

一、配置redis

二、scrapy基于redis的数据持久化操作流程

1.安装scrapy-redis组件:

2.编写爬虫文件:

3.编写管道文件:

4.编写配置文件:

ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400
}
REDIS_HOST = 'redis服务的ip地址'
REDIS_PORT = 6379
REDIS_ENCODING = ‘utf-8’
REDIS_PARAMS = {‘password’:’123456’}
# 使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允许暂停
SCHEDULER_PERSIST = True

5.启动redis

6.执行当前爬虫文件:

7. 向队列中扔一个起始url

例:爬虫文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from redisScrapyPro.items import RedisscrapyproItem
#-1.将redis数据库的配置文件进行改动: protected-mode no        #bind 127.0.0.1
#0.下载scrapy-redis
#1.创建工程
#2.创建基于scrawlSpider的爬虫文件
#3.导入RedisCrawlSpider类
#4.将start_urls更换成redis_key属性
#5.在现有代码的基础上进行连接提取和解析操作
#6.将解析的数据值封装到item中,然后将item对象提交到scrapy-redis组件中的管道里('scrapy_redis.pipelines.RedisPipeline': 400,)
#7.管道会将数据值写入到指定的redis数据库中(在配置文件中进行指定redis数据库ip的编写)
#8.在当前工程中使用scrapy-redis封装好的调度器(在配置文件中进行配置)
#9.将起始url扔到调度器队列(redis_key)中
#10.启动redis服务器:redis-server redis.windows.conf
#11.启动redis-cli
#12.执行当前爬虫文件:scrapy runspider 爬虫文件
#13.向队列中扔一个起始url:在redis-cli执行扔的操作(lpush redis_key的value值 起始url)
class RedisdemoSpider(RedisCrawlSpider):
    name = 'redisDemo'
    #allowed_domains = ['www.xxx.com']
    #start_urls = ['http://www.xxx.com/']

    #scrapy_redis的调度器队列的名称,最终我们会根据该队列的名称向调度器队列中扔一个起始url
    redis_key = "redisQueue"

    link = LinkExtractor(allow=r'/pic/page/\d+\?s=\d+')
    link1 = LinkExtractor(allow=r'/pic/page/1')
    rules = (
        Rule(link, callback='parse_item', follow=True),
        Rule(link1, callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        div_list = response.xpath('//div[@class="thumb"]')
        for div in div_list:
            img_url = "https:"+div.xpath('./a/img/@src').extract_first()
            item = RedisscrapyproItem()
            item['imgUrl'] = img_url

            yield item
上一篇下一篇

猜你喜欢

热点阅读