Python爬虫之分布式爬虫

分布式爬虫

1.详情介绍

        分布式爬虫是指将一个爬虫任务分解成多个子任务,在多个机器上同时执行,从而加快数据的抓取速度和提高系统的可靠性容错性的技术。

        传统的爬虫是在单台机器上运行,一次只能处理一个URL,而分布式爬虫通过将任务分解成多个子任务,可以同时处理多个URL,从而提高爬取数据的效率。在分布式爬虫中,通常有一个主节点负责任务的调度和管理,其他节点(也称为从节点)负责实际的数据采集和处理。

分布式爬虫的好处包括:

提高爬取速度通过同时处理多个URL,可以大大加快数据的抓取速度
提高可靠性和容错性如果某个节点出现故障或者网络中断,其他节点可以继续工作,从而保证任务的完成
分散资源消耗将任务分布到多个节点上执行,可以分散资源消耗,避免单台机器过载
扩展性强可以根据需求增加或减少节点数量,从而灵活调整系统的规模

分布式爬虫可以应用于各种场景,比如搜索引擎抓取网页数据、大规模数据分析和挖掘等。但是分布式爬虫也面临一些挑战,如数据一致性、网络通信、任务调度等问题,需要合理设计和实施。

2.丰富的工具

分布式爬虫所涉及的工具:

分布式任务调度工具用于将任务分发给多个爬虫节点,并协调任务的执行顺序和并发度。常用的工具有Celery、Apache Mesos和Kafka。
分布式消息队列用于传递任务和数据。爬虫节点通过订阅队列接收任务和发送爬取结果。常用的消息队列有RabbitMQ和Apache Kafka。
分布式爬虫框架用于构建和管理分布式爬虫。框架提供了任务调度、数据传输和分布式爬取的功能。常用的框架有Scrapy、PySpider和StormCrawler。
分布式数据库用于存储爬取的数据。分布式数据库提供高可用性和扩展性,可以存储大量的数据,并支持并发读写操作。常用的数据库有MongoDB、Cassandra和HBase。
分布式存储系统用于存储大量的爬取数据和爬虫代码。分布式存储系统提供高可用性、高吞吐量和容错性。常用的存储系统有Hadoop HDFS、Amazon S3和Google Cloud Storage。
分布式代理池用于处理反爬虫机制和IP封锁。分布式代理池动态分配代理IP给爬虫节点,以避免被封禁或限制访问。常用的代理池有Scrapy-Proxy、ProxyPool和IPProxyPool。
分布式解析器用于提取和解析HTML、XML和JSON等数据格式。分布式解析器可以并行解析多个页面,并将数据提供给爬虫节点。常用的解析器有BeautifulSoup、Parsel和Lxml。
分布式反反爬虫工具用于处理网站的反爬虫机制和封锁策略。分布式反反爬虫工具可以自动处理验证码、动态加载和JS渲染等反爬虫技术。常用的工具有Selenium、Splash和Puppeteer。
分布式监控和日志工具用于监控爬虫的状态和性能,并记录爬取过程中的日志信息。监控工具可以通过Web界面提供实时监控和报警功能。常用的工具有Prometheus、Grafana和ELK Stack。
分布式数据处理工具用于对爬取的数据进行清洗、分析和存储。数据处理工具可以进行数据清洗、去重、聚合和转换等操作。常用的工具有Pandas、Spark和Hive。

这些工具可以帮助构建一个高效、可靠和可扩展的分布式爬虫系统。根据具体的需求和场景,可以选择适合的工具进行组合和配置。

3.准备工作

        

scrapy runspider 是 Scrapy 框架提供的一个命令行工具,用于运行指定的 Spider(爬虫)。下面使用 scrapy runspider 的结合Redis实现一个分布式爬虫开始前提:

  1. 创建一个 Spider 类

首先,你需要创建一个继承自 scrapy.Spider 的 Python 类。这个类定义了你的爬虫的行为和规则。你可以在类中定义起始 URL、提取数据的规则、如何跟踪链接等等。

import scrapyclass MySpider(scrapy.Spider):name = 'myspider'start_urls = ['http://example.com']def parse(self, response):# 提取数据的代码pass

  1. 运行 Spider

要运行这个 Spider,你可以使用以下命令:

scrapy runspider myspider.py

这个命令会在当前目录下启动 Scrapy 进程并运行指定的 Spider。

  1. 指定输出文件

默认情况下,Scrapy 会将爬取到的数据打印到屏幕上。如果你想将数据保存到文件中,可以使用 -o 参数指定输出文件的路径和格式。例如,将数据保存为 JSON 文件:

scrapy runspider myspider.py -o data.json

  1. 设置其他选项

你可以在 scrapy runspider 命令后面添加其他选项来配置你的爬虫。常用的选项包括:

  • -a:传递给 Spider 的参数,例如 -a category=books
  • -s:设置 Scrapy 的设置,例如 -s BOT_NAME=mybot
  • -L:设置日志级别,例如 -L INFO

以上就是使用 scrapy runspider 运行 Spider 的基本教程。你可以根据自己的需要在 Spider 类中添加更多的功能和配置。详细的文档可以在 Scrapy 的官方网站上找到:https://docs.scrapy.org

 4.redis的下载

要下载Redis,可以按照以下步骤进行操作:

  1. 打开Redis的官方网站:https://redis.io/.

  2. 在主页上找到并点击"Download"按钮,或者直接访问https://redis.io/download页面。

  3. 在下载页面上,可以看到最新版本的Redis以及之前的版本。根据自己的需求选择适合的版本,例如选择最新的稳定版本。点击所选择版本的下载链接,将会跳转到该版本的下载页面。

  4. 在下载页面上,会列出各种下载选项,根据你的操作系统选择合适的选项。如果你使用Linux,可以下载源代码进行编译安装;如果你使用Windows,可以下载预编译的二进制文件。点击所选择的下载链接,开始下载Redis压缩包。

  5. 下载完成后,解压缩Redis压缩包到你选择的目录中。

  6. 进入解压缩后的Redis目录,你会发现一些可执行文件和配置文件。

  7. 在命令行中进入Redis目录,执行以下命令启动Redis服务。

    • 在Linux或Mac上:

      $ src/redis-server
      

    • 在Windows上:

      > redis-server.exe
      

    如果你想修改默认配置文件,可以使用以下命令启动Redis并指定配置文件路径:

    • 在Linux或Mac上:

      $ src/redis-server /path/to/redis.conf
      
    • 在Windows上:

      > redis-server.exe C:\path\to\redis.conf
      
  8. Redis服务成功启动后,你可以通过Redis客户端连接到Redis服务器进行操作。在命令行中输入以下命令启动Redis客户端:

    • 在Linux或Mac上:

      $ src/redis-cli
      
    • 在Windows上:

      > redis-cli.exe
      

    你可以使用各种Redis命令与服务器进行交互。

应用案例

1.前言

        此案例是通过分布式爬虫对一个新闻问政平台的投诉信息进行爬取,结合分布式爬虫Redis缓存实现对数据的快速多量的爬取和存储

2.实现步骤

2.1基本项目创建

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from sevenBlood.items import SevenbloodItemclass SevenSpider(CrawlSpider):name = "seven"# allowed_domains = ["www.baidu.com"]# 定义调度器的名称redis_key='sun'rules = (Rule(LinkExtractor(allow=r"id=1&page=\d+"), callback="parse_item", follow=False))

2.2获取新闻标题数据

    def parse_item(self, response):tr_list = response.xpath('/html/body/div[2]/div[3]/ul[2]/li')for tr in tr_list:new_title = tr.xpath('./span[3]/a/text()').extract_first()print(new_title)item = SevenbloodItem()item['new_title'] = new_titleyield item

2.3配置item.py文件

import scrapyclass SevenbloodItem(scrapy.Item):new_title = scrapy.Field()

2.4配置setting.py文件

ROBOTSTXT_OBEY = FalseLOG_LEVEL='ERROR'USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"
# 指定管道
ITEM_PIPELINES = {
"scrapy_redis.pipelines.RedisPipeline" : 400
}# 指定调度器
#使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#是否允许暂停
SCHEDULER_PERSIST = TrueREDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
REDIS_ENCODING ="utf-8"

2.5Redis设置 

在redis的下载安装路径里,点击redis.windows.conf文件

bind 127.0.0.1进行注释

然后回到redis的下载安装路径里,先点击redis-server.exe启动redis服务

在点击打开redis-cil.exe文件

2.6项目运行 

cmd打开命令行cd切换到项目目录之中,切记需要切换到根目录之中

输入scrapy runspider ‘’项目名‘’.py

然后在redis-cil.exe文件里输入,就成功进行分布式的爬取

lpush ''redis_key'' “爬取网站URL”

3.数据的查看

使用Redis Desktop Manager 0.9.3.817,对缓存数据进行查看

下载链接:提取码:1631

http:// https://pan.baidu.com/s/1wyELUhOn_rumFecNAS7L0A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/302599.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】用红黑树封装map和set

我们之前学的map和set在stl源码中都是用红黑树封装实现的,当然,我们也可以模拟来实现一下。在实现之前,我们也可以看一下stl源码是如何实现的。我们上篇博客写的红黑树里面只是一个pair对象,这对于set来说显然是不合适的&#xff…

运行游戏找不到steam_api64.dll怎么办?steam_api64.dll丢失解决方法

steam_api64.dll是64位Windows操作系统上的一个动态链接库(DLL)文件,其大小通常在1.5-3.5 MB之间。这个文件对于Steam平台至关重要,因为它实现了游戏验证、更新等功能,并确保了用户拥有游戏的合法使用权。它通过提供一…

tensorflow.js 使用 opencv.js 将人脸特征点网格绘制与姿态估计线绘制结合起来,以获得更高的帧数

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图 文章目录 系列文章目录前言一、实现步…

【Liunx】什么是make和makefile?

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

蓝桥杯-油漆面积

代码及其解析:(AC80%) 思路:是把平面划成单位边长为1(面积也是1)的方格。每读入一个矩形,就把它覆盖的方格标注为已覆盖;对所有矩形都这样处理,最后统计被覆盖的方格数量即可。编码极其简单,但…

让无刷电机转起来——换相(BLDC)

目录 1. 引言 2. 无刷电机换相原理 2.1 通电原理(一相) 2.2 换相原理(三相) 2.3 驱动电路 2.3.1 上下桥臂 2.3.2 六步换相 3. 结束语 1. 引言 前面博客,博主对于无刷电机的驱动方式与电路作了简要的介绍&#…

一键开启Scrum回顾会议的精彩时刻

其实回顾会议作为一个检视、反馈、改进环节,不仅在传统的瀑布管理模式中,还是在Scrum一类的敏捷管理流程中,都是非常重要的活动。一些团队认为它无法产生直接的价值,所以有意忽略了这个会议;一些团队在越来越多的回顾中…

DNS 各记录类型说明及规则

各记录类型使用目的 记录类型使用目的A 记录将域名指向一个 IP 地址。CNAME 记录将域名指向另一个域名,再由另一个域名提供 IP 地址。MX 记录设置邮箱,让邮箱能收到邮件。NS 记录将子域名交给其他 DNS 服务商解析。AAAA 记录将域名指向一个 IPv6 地址。…

Vite 项目中环境变量的配置和使用

Vite 项目中环境变量的声明 我们要在 Vite 项目中进行环境变量的声明,那么需要在项目的根目录下,新建 .env.[mode] 文件用于声明环境变量,如: .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…

Linux初学(十七)防火墙

一、防火墙简介 1.1 防火墙的类别 安全产品 杀毒: 针对病毒,特征篡改系统中的文件杀毒软件针对处理病毒程序防火墙: 针对木马,特征系统窃取防火墙针对处理木马 防火墙分为两种 硬件防火墙软件防火墙 硬件防火墙 各个网络安全…

2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024)

2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024) 会议简介 智能计算、大数据应用与信息科学之间存在相互依存、相互促进的关系。智能计算和大数据应用的发展离不开信息科学的支持和推动,而信息科学的发展又需要智能计算和大数据应用的不断拓展和应用。智…

C++ 学习笔记

文章目录 【 字符串相关 】C 输入输出流strcpy_s() 字符串复制输出乱码 【 STL 】各个 STL 支持的常见方法 ? : 运算符switch case 运算符 switch(expression) {case constant-expression :statement(s);break; // 可选的case constant-expression :statement(s);break; //…

LT8712SX DP转两路HDMI2.0 MST 4K60hz,芯片方案

1. 特性 ⚫USB Type-C▪兼容USB上的VESA DisplayPort Alt模式 c型标准1.0b - DP Alt模式支持引脚分配C, D和E -符合USB供电规范3.1 -符合USB Type-C电缆和连接器 规范1.3 ▪内置三CC逻辑和PD控制器充电器和 正常的沟通 ▪支持UFP和DFP数据角色 ▪支持电源,接…

非关系型数据库--------------------Redis 群集模式

目录 一、集群原理 二、集群的作用 (1)数据分区 (2)高可用 Redis集群的作用和优势 三、Redis集群的数据分片 四、Redis集群的工作原理 五、搭建redis群集模式 5.1启用脚本配置集群 5.2修改集群配置 5.3启动redis节点 5…

Java 那些诗一般的 数据类型 (下篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接…

通过 Spark SQL 和 DataFrame 操作表和多种内部数据源总结

文章目录 前言在Spark应用中使用Spark SQLSQL 表和视图内部表和外部表创建库和表创建视图查看元数据表缓存读取表数据 表和 DataFrame 的数据来源DataFrameReaderDataFrameWriterParquetJSONCSVAvroORCImagesBinary Files 总结 前言 本文将探讨 Spark 中 Spark SQL 接口是如何…

StockTrading AI小模型股票自动交易系统 转载

Stock-Trading StockTrading AI小模型股票自动交易系统 项目文档 Stock-Trading 语雀 项目展示 功能介绍 对接证券平台,实现股票自动化交易使用QuartZ定时任务调度,每日自动更新数据使用DL4J框架实现LSTM模型指导股票买入,采用T1短线交易策…

C/C++如何快速学习?少走3年弯路

于我而言,最开始学习就是 C,除了计算机专业,其他专业可能学习的第一门编程语言为 C 语言,还是谭浩强爷爷那本,当时想着有点 C 基础,无外乎就是 C 语言的升级版,于是开启了 C 的路程。 语言这个…

鸿蒙、如何使用@ohos.contact 接口,实现对联系人的增删查改功能

介绍 本示例使用ohos.contact 接口,实现了对联系人的增删查改功能。 效果预览 使用说明 1.点击 按钮,跳转添加联系人界面,输入联系人信息,点击 √,确认添加联系人,并返回首页; 2.点击联系人…

学习记录14-运算放大器2

目录 前言 一、理想放大器 二、虚断 二、虚短 虚短的两个使用条件 1.虚短概念 2.如果我们将运放的同相端和反相端颠倒会怎样呢? 总结 前言 主要讲述运算放大器的虚短虚断 一、理想放大器 如果没有基础或只是想简单了解,可以看我前一篇文章&am…