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 scrapy

class 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 SevenbloodItem

class 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_title
            yield item

2.3配置item.py文件

import scrapy

class SevenbloodItem(scrapy.Item):
    new_title = scrapy.Field()

2.4配置setting.py文件

ROBOTSTXT_OBEY = False

LOG_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 = True

REDIS_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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Glide配置AppGlideModule定制化线程池,Kotlin(1)

Android Glide配置AppGlideModule定制化线程池,Kotlin(1) plugins {id org.jetbrains.kotlin.kapt }implementation com.github.bumptech.glide:glide:4.16.0kapt com.github.bumptech.glide:compiler:4.16.0 import android.content.Context…

C之结构体初始化10种写法总结(九十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

开启 Keep-Alive 可能会导致http 请求偶发失败

大家好,我是蓝胖子,说起提高http的传输效率,很多人会开启http的Keep-Alive选项,这会http请求能够复用tcp连接,节省了握手的开销。但开启Keep-Alive真的没有问题吗?我们来细细分析下。 最大空闲时间造成请求…

跨境金融区块链服务平台

跨境金融服务是因企业及个人跨境经营、交易、投资、往来等活动而产生的资金使用、调拨、配置等需求,而提供的金融服务。近年来,随着我国经济的快速稳步增长和全球化经济一体化的不断深入发展,跨境金融业务增长迅速,监管也开始转化…

在ChatGPT中,能用DALL·E 3编辑图片啦!

4月3日,OpenAI开始向部分用户,提供在ChatGPT中的DALLE 3图片编辑功能。 DALLE 3是OpenAI在2023年9月20日发布的一款文生图模型,其生成的图片效果可以与Midjourney、leonardo、ideogram等顶级产品媲美,随后被融合到ChatGPT中增强其…

反截屏控制技术如何防止信息通过手机拍照泄漏?

反截屏控制技术为企业数据安全提供了重要的防护措施。通过以下几点,有效阻止了信息通过拍照等方式的泄漏: 反截屏控制开启,用户启动截屏操作时,允许非涉密内容截屏操作,但所有涉密内容窗口会自动隐藏,防止涉…

记录一次threejs内存泄露问题排查过程

问题描述: 一个有关地图编辑的使用threejs的这样的组件,在多次挂载销毁后,页面开始卡顿。 问题排查: 1. 首先在chrome dev tool中打开performance monitor面板,观察 JS head size、DOME Nodes、Js event listeners数…

AWVS 安装详细教程

一、软件介绍 Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。AWVS官方网站是:http://www.acunetix.com/ 二、下载安装 官方下载地址:https…

【大数据存储】yolov3识虫实验

一、项目实践步骤 图 1 构建模型和完成训练的程序图 二、实验背景 2.1数据集介绍 AI识虫数据集结构如下: 提供了2183张图片,其中训练集1693张,验证集245,测试集245张。包含7种昆虫,分别是Boerner、Leconte、Linnaeus…

​如何使用ArcGIS Pro进行洪水淹没分析

洪水淹没分析是一种常见的水文地理信息系统应用,用于模拟和预测洪水事件中可能受到淹没影响的地区,这里为大家介绍一下ArcGIS Pro进行洪水淹没分析的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&…

搞学术研究好用免费的学术版ChatGPT网站-学术AI

https://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&sceneloginhttps://chat.uaskgpt.com/mobile/?user_sn88&channelcsdn&scenelogin 推荐一个非常适合中国本科硕士博士等学生老师使用的学术版ChatGPT, 对接了超大型学术模型&#xff0c…

linux------jekins构建cicd

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:linux 🤝希望本文对您有所裨益,如有不足之处&#…

【动态规划】【背包问题】基础背包

【动态规划】【01背包问题】 解法 二维dp数组01背包解法 一维dp数组(滚动数组)01背包 ---------------🎈🎈题目链接🎈🎈------------------- 解法 二维dp数组01背包 😒: 我的代码实现> …

操作系统导论课后作业-第十七章答案

课程作业-第十七章: 17.1首先以标志flag -n 10 -H 0 -p BEST -s 0运行程序来产生一些随机的分配和空闲。你能预测malloc()/free()会返回什么吗?你可以在每次请求后猜测空闲列表的状态吗?随着时间的推移,你对空闲列表有什么发现&a…

2012年认证杯SPSSPRO杯数学建模C题(第一阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现: 从 1984 年的美国洛杉矶奥运会开始,奥运会就不在成为一个“非卖品”,它在向观众诠释更高更快更强的体育精神的同时,也在攫取着巨大的商业价值&#…

CSS3新增的语法(四)

CSS3新增的语法(四)【布局】 14. 多列布局15.伸缩盒模型1. 伸缩盒模型简介2. 伸缩容器、伸缩项目3. 主轴与侧轴4. 主轴方向5. 主轴换行方式6. flex-flow7. 主轴对齐方式8. 侧轴对齐方式8.1 一行的情况8.2 多行的情况 9.flex 实现水平垂直居中10. 伸缩性1…

Java异常入门

目录 前言 异常 什么是异常 异常(Exception)和错误(Error) 异常的处理 异常的作用 前言 我们用一个简单情形引入异常: class Devide{public int divide(int a ,int b ){return a / b ;} }public class Main{pu…

PDF编辑和格式转换工具 Cisdem PDFMaster for Mac

Cisdem PDFMaster for Mac是一款功能强大的PDF编辑和格式转换工具。它为用户提供了直观且易于使用的界面,使常用功能触手可及,从而帮助用户轻松管理、编辑和转换PDF文件。 软件下载:Cisdem PDFMaster for Mac v6.0.0激活版下载 作为一款完整的…

excel统计分析——协方差分析的作用

参考资料:生物统计学 1、协变量与试验因素的区别 如果把协方差分析资料中的协变量看作多因素方差分析资料中的一个因素,则两类资料有相似之处,但两类资料有本质的不同。在方差分析中,各因素的水平时人为控制的,即使是…

前视声呐目标识别定位(四)-代码解析之启动识别模块

前视声呐目标识别定位(一)-基础知识 前视声呐目标识别定位(二)-目标识别定位模块 前视声呐目标识别定位(三)-部署至机器人 以启动识别模块为例,其余关闭识别模块,启动和关闭声呐…