分布式

  • 实现分布式的方式:scrapy+redis(scrapy结合着scrapy-redis组件)
  • 原生的scrapy框架是无法实现分布式的
    • 什么是分布式

      • 需要搭建一个分布式机群,然后让机群中的每一台电脑执行同一组程序,让其对同一组资源进行联合且分布的数据爬取。
      • 因调度器,管道无法被分布式机群共享所以原生架构scrapy无法实现分布式
      • 使用scrapy-redis组件可以给原生的scrapy框架提供共享管道和调度器实现分布式
        • pip install scrapy-redis

实现流程

创建工程

创建一个爬虫工程:scrapy startproject proName
进入工程创建一个基于CrawlSpider的爬虫文件
scrapy genspider -t crawl spiderName www.xxx.com
执行工程:scrapy crawl spiderName

1,修改爬虫文件

  • 1.1 导包:from scrapy_redis.spiders import RedisCrawlSpider
  • 1.2 修改当前爬虫类的父类为:RedisCrawlSpider
  • 1.3 将start_url 替换成redis_key的属性,属性值为任意字符串
    • redis_key=‘xxxx’ #可以被共享的调度器队列的名称/稍后我们需要将一个起始url手动添加到redis_key表示的队列中
  • 1.4 将数据解析的操作补充完成即可

fbs.py 爬虫源文件

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from fbsPro.items import FbsproItemclass FbsSpider(RedisCrawlSpider):name = 'fbs'#allowed_domains = ['www.xxx.com']#start_urls = ['http://www.xxx.com/']redis_key = 'sunQueue' #可以被共享的调度器队列的名称# 稍后我们需要将一个起始url手动添加到redis_key表示的队列中rules = (Rule(LinkExtractor(allow=r'id=1&page=\d+'), callback='parse_item', follow=True),)def parse_item(self, response):# 将全站的标题获取li_list = response.xpath('/html/body/div[2]/div[3]/ul[2]/li')for li in li_list:title = li.xpath('./span[3]/a/text()').extract_first()item = FbsproItem()item['title']=titleyield item

2,对settings.py进行配置

  • 指定调度器
# 使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允许暂停
SCHEDULER_PERSIST = True
  • 指定管道
#开启使用scrapy-redis组件中封装好的管道
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400
} # 该种管道只可以将item写入redis
  • 指定redis
#在配置文件中进行爬虫程序链接redis的配置:REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# REDIS_ENCODING = 'utf-8'
# REDIS_PARAMS = {'password':'123456'}

完整代码

# Scrapy settings for fbsPro project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.htmlBOT_NAME = 'fbsPro'SPIDER_MODULES = ['fbsPro.spiders']
NEWSPIDER_MODULE = 'fbsPro.spiders'
#LOG_LEVEL = 'ERROR' #指定类型日志的输出(只输出错误信息)#设置UA伪装
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'# Obey robots.txt rules
#改成False不遵从robots协议
ROBOTSTXT_OBEY = False# 使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允许暂停
SCHEDULER_PERSIST = True#开启使用scrapy-redis组件中封装好的管道
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400
}#在配置文件中进行爬虫程序链接redis的配置:REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# REDIS_ENCODING = 'utf-8'
# REDIS_PARAMS = {'password':'123456'}# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 5# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16# Disable cookies (enabled by default)
#COOKIES_ENABLED = False# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {#    'fbsPro.middlewares.FbsproSpiderMiddleware': 543,
#}# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {#    'fbsPro.middlewares.FbsproDownloaderMiddleware': 543,
#}# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {#    'scrapy.extensions.telnet.TelnetConsole': None,
#}# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html# ITEM_PIPELINES = {#    'fbsPro.pipelines.FbsproPipeline': 300,
# }# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

3,配置redis的配置文件redis.windows.conf

  • 解除默认绑定

    • #bind 127.0.0.1 注释掉(第56行)
  • 关闭保护模式

    • protected-mode no 把yes改成no(第75行)
  • redis运行时出错
    Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

  • 解决方法,依次输入以下命令

    • redis-cli.exe
    • shutdown
    • exit
    • redis-server redis.windows.conf
  • 启动redis服务和客户端

    • redis-server redis.windows.conf
  • redis-cli

5 执行scrapy工程

  • 不要在配置文件中加入#LOG_LEVEL = ‘ERROR’
  • 工程启动后 程序回停留在listening位置,等待其实url的加入

6 想redis_key表示的队列中添加起始url

  • 需要在redis的客户端执行如下指令:(调度器队列式存在与redis中)
  • lpush sunQueue http://wz.sun0769.com/political/index/politicsNewest?id=1&page=

我们查看数据库可以看见爬取到的数据

22-爬虫之scrapy框架分布式09相关推荐

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

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

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

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

  3. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  4. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  5. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  6. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  7. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  8. Python3爬虫之Scrapy框架的下载器中间件

    Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...

  9. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

最新文章

  1. 搞一个短信验证码登录,难吗?四步搞定!
  2. 进程状态控制-进程创建
  3. 【转】】Vue项目部署tomcat,刷新报错404解决办法
  4. sap 彻底删除物料主档
  5. js中的墙头草---this
  6. linux上配置spark集群
  7. 操作系统中抢占式和非抢占式内核的区别
  8. CV+NLP,使用tf.Keras构建图像搜索引擎
  9. elementui的tree组件页面显示不出数据_[Angular 组件库NG-ZORRO基础入门] -Hacker News: Pagination...
  10. 关于“抵制”易语言的通告
  11. JAVA贪吃蛇游戏1.0版本
  12. Pr 添加字幕与自动字幕时间轴
  13. 软件测试系统性总结思维导图
  14. 苹果PD20W快充方案缺货,芯片供应不足,怎么破局?
  15. 夏普PC_1500计算机使用,夏普PC-1500袖珍计算机的检修(续)
  16. Linux上一个恶意程序分析实例:一步一步揭开病毒程序的面纱1
  17. Python requests模块高级用法
  18. Kickstarter | 海外项目汇总
  19. 运动世界校园一直显示服务器开小差,运动世界校园跑步异常 运动世界跑步成绩异常怎么办...
  20. html5 video标签实现手机端视频播放全屏显示

热门文章

  1. html输出text,为什么text();和html();输出结果不一样呢?
  2. c++ dll继续使用然后强制删除dll文件_Windows 10系统安全风险,近300个系统执行文件容易遭受劫持攻击...
  3. 网络安全模型_基于数据驱动的网络安全流量分析总结
  4. python os模块方法_python os模块的常用方法
  5. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)
  6. mysql扩展使用_mysql的扩展应用
  7. Android无法运行AVD,android – 无法运行AVD(模拟器)
  8. linux如何导出加密卡私钥,linux – 如何使用gpg中的私钥加密文件
  9. linux 引用其它脚本中的变量
  10. base64 RFC 4648