分布式概念

分布式爬虫:1.概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取。2.原生的scrapy是不可以实现分布式爬虫?a)调度器无法共享b)管道无法共享3.scrapy-redis组件:专门为scrapy开发的一套组件。该组件可以让scrapy实现分布式。a)下载:pip install scrapy-redis4.分布式爬取的流程:a)redis配置文件的配置:i.bind 127.0.0.1 进行注释ii.protected-mode no   关闭保护模式b)redis服务器的开启:基于配置配置文件c)创建scrapy工程后,创建基于crawlSpider的爬虫文件d)导入RedisCrawlSpider类,然后将爬虫文件修改成基于该类的源文件e)将start_url修改成redis_key = ‘XXX’f)在配置文件中进行相应配置:将管道配置成scrapy-redis集成的管道g)在配置文件中将调度器切换成scrapy-redis集成好的调度器h)执行爬虫程序:scrapy runspider  xxx.pyi)redis客户端:lpush 调度器队列的名称 “起始url”          j)keys * redis客户端查看数据,如:lrange qiubai:items 0 -1【补充】
#如果redis服务器不在自己本机,则需要在setting中进行如下配置
REDIS_HOST = 'redis服务的ip地址'
REDIS_PORT = 6379【注意】近期糗事百科更新了糗图板块的反爬机制,更新后该板块的页码链接/pic/page/2/s=5135066,末尾的数字每次页面刷新都会变化,因此爬虫文件中链接提取器的正则不可写为/pic/page/\d+/s=5135066而应该修改成/pic/page/\d+

一.redis简单回顾

  1.启动redis:

    mac/linux:   redis-server redis.conf

    windows: redis-server.exe redis-windows.conf

  2.对redis配置文件进行配置:

    - 注释该行:bind 127.0.0.1,表示可以让其他ip访问redis

    - 将yes该为no:protected-mode no,表示可以让其他ip操作redis

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

  1.安装scrapy-redis组件:

    - pip install scrapy-redis

    - scrapy-redis是基于scrapy框架开发出的一套组件,其作用就是可以让scrapy实现分布式爬虫。

  2.编写爬虫文件:

    - 同之前scrapy中基于Spider或者CrawlSpider的编写方式一致。

  3.编写管道文件:

    - 在scrapy-redis组件中已经帮助我们封装好了一个专门用于连接存储redis数据库的管道(RedisPipeline),因此我们直接使用即可,无需自己编写管道文件。

  4.编写配置文件:

    - 在settings.py中开启管道,且指定使用scrapy-redis中封装好的管道。

ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400}

- 该管道默认会连接且将数据存储到本机的redis服务中,如果想要连接存储到其他redis服务中需要在settings.py中进行如下配置:

REDIS_HOST = 'redis服务的ip地址'REDIS_PORT = 6379REDIS_ENCODING = ‘utf-8’REDIS_PARAMS = {‘password’:’123456’}

三.redis分布式部署

  1.scrapy框架是否可以自己实现分布式?

    - 不可以。原因有二。

      其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url。(多台机器无法共享同一个调度器)

      其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储。(多台机器无法共享同一个管道)

  2.redis实现分布式基本流程:

    - 使用基于scrapy-redis组件中的爬虫文件。

import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Rulefrom movieproject.items import MovieprojectItem#导入scrapy-redis中的模块from scrapy_redis.spiders import RedisCrawlSpiderclass NnSpider(RedisCrawlSpider):name = 'nn' allowed_domains = ['www.id97.com']#redis_key表示调度器中的队列(将要爬取的页面数据对应的url都需要放置到调度器队列中)redis_key = 'nnspider:start_urls'# 根据规则提取所有的页码链接page_link = LinkExtractor(allow=r'/movie/\?page=\d')detail_link = LinkExtractor(restrict_xpaths='//div[contains(@class,"col-xs-1-5")]/div/a')# detail_link = LinkExtractor(allow=r'/movie/\d+\.html$')# follow : 是否跟进rules = (# 所有的页码不用处理,跟进即可Rule(page_link, follow=True),# 所有的详情页处理,不用跟进Rule(detail_link, callback='parse_item', follow=False),)def parse_item(self, response):# 创建一个item对象item = MovieprojectItem()# 电影海报item['post'] = response.xpath('//a[@class="movie-post"]/img/@src').extract_first()# 电影名字item['name'] = response.xpath('//h1').xpath('string(.)').extract_first()yield item

- 使用scrapy-redis组件中封装好的调度器,将所有的url存储到该指定的调度器中,从而实现了多台机器的调度器共享。

# 使用scrapy-redis组件的去重队列DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 使用scrapy-redis组件自己的调度器SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 是否允许暂停SCHEDULER_PERSIST = True

- 使用scrapy-redis组件中封装好的管道,将每台机器爬取到的数据存储通过该管道存储到redis数据库中,从而实现了多台机器的管道共享。

ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400,
}

- 执行:scrapy runspider xxx.py,然后向调度器队列中传入起始url:lpush nnspider:start_urls "http://www.xxx.com/"

转载于:https://www.cnblogs.com/fmgao-technology/p/10142102.html

scrapy框架之分布式操作相关推荐

  1. 6 scrapy框架之分布式操作

    分布式爬虫 一.redis简单回顾 1.启动redis: mac/linux:   redis-server redis.conf windows: redis-server.exe redis-wi ...

  2. Scrapy框架+Gerapy分布式爬取海外网文章

    Scrapy框架+Gerapy分布式爬取海外网文章 前言 一.Scrapy和Gerapy是什么? 1.Scrapy概述 2.Scrapy五大基本构成: 3.建立爬虫项目整体架构图 4.Gerapy概述 ...

  3. scrapy框架之分布式爬虫

    概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取 作用:提升爬取数据的效率 如何实现分布式? 安装一个scrapy-redis的组件(使用的是redis数据库) 原生的scrapy是 ...

  4. Scrapy框架-redis分布式(从Scrapy框架创建项目到redis分布式)

    盗墓笔记案例: 目标网址:http://www.daomubiji.com/ scrapy项目: 1. 创建项目 2. 创建爬虫 3. 定义item 数据内容: 1. 书的名称 2. 章节名称 3. ...

  5. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  6. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  7. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB

    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本涵盖了爬虫 ...

  8. 22-爬虫之scrapy框架分布式09

    分布式 实现分布式的方式:scrapy+redis(scrapy结合着scrapy-redis组件) 原生的scrapy框架是无法实现分布式的 什么是分布式 需要搭建一个分布式机群,然后让机群中的每一 ...

  9. python中data.find_all爬取网站为空列表_Python网络爬虫之Scrapy 框架-分布式【第二十九节】...

    1. 介绍scrapy-redis框架 scrapy-redis 一个三方的基于redis的分布式爬虫框架,配合scrapy使用,让爬虫具有了分布式爬取的功能. github地址: https://g ...

最新文章

  1. 用C#实现FTP搜索引擎
  2. C# typeof Gettype is as 拆箱 装箱
  3. [转]小硕3年是怎样发6篇SCI的
  4. 蚂蚁金服疯了吗?大动作,非裁员,年底全员涨薪又涨假期!!!
  5. charles源码分析
  6. SIFT(尺度不变特征变换)算法浅析
  7. 一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】
  8. shell脚本一键安装nginx[最终版]
  9. win10 2004更新完成之后出现进不去系统的问题
  10. 管理分支:git branch
  11. 数据字典中的数据类型与ABAP中的中数据类型对应关系
  12. 【VSCode】SSH远程连接服务器
  13. css内联样式!important
  14. linux aria2安装路径,Aria2 Linux 完整安装及使用教程
  15. 软件工程师日语词汇表
  16. 金属非金属如何去毛刺 机器人浮动去毛刺
  17. 常用的网络协议以及使用场景
  18. java对opengl绑定_你好,JOGL - Java与OpenGl的绑定-Java频道-中国IT实验室
  19. Relax中的量化管理
  20. 解决layui的table数据重载reload where参数会保留上次条件的问题

热门文章

  1. 在主线程执行_深入理解JavaScript执行机制
  2. oracle往游标中存数据,Oracle数据库:ORACLE11G在存储过程里面遍历游标
  3. 重做 oracle_Oracle数据库基本知识(1)-数据库(1)
  4. php网站模板怎么修改,自己做网站如何用好并自主修改网上的免费模板
  5. 539.最小时间差-LeetCode
  6. 四种依恋类型_【工具】成人依恋量类型介绍
  7. Android在Activity中动态增加xml自定义样式布局控件(引用xml布局文件和循环增加控件)
  8. Python构建跳转表
  9. html5的service worker,GitHub - w3c/ServiceWorker: Service Workers
  10. mysql数据库备份注意,Tips: MySQL数据库使用mysqldump备份恢复时的注意事项