当前位置: 首页 > news >正文

从0到1构建智能分布式大数据爬虫系统

文章目录

  • 1. 写在前面
  • 2. 数据获取挑战
  • 3. 基础架构
  • 4. 爬取管理
  • 5. 数据采集
  • 6. 增量与去重设计

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  随笔写一下,最近比较忙。这里我还是拿开源情报或者舆情项目来展开描述,因为现在有自研爬虫系统的企业基本上所涉及的数据源第一个比较多,第二个则是数据更新及时性高。爬虫业务单一少的基本也到不上平台级,爬虫写完基本挂到容器里面就完了,有的甚至可能容器都用不上!

舆情项目中数据采集是一个极其关键的部分!核心技术则是爬虫技术的构建,这里说的不是指简单的一些爬虫脚本程序,数据源肯定是很多的,每天几乎覆盖的源或多或少都在变化,数据源状态或者页面结构变化

这里我画了一个基础且常见的爬虫平台架构:

在这里插入图片描述

2. 数据获取挑战

  数据需求范围广,难以全面采集!很多产品需要数据的赋能。对数据的需求往往需要采集全网或特定领域的数据,在有限的时间和成本内,批量深度爬取,尤其目前国内的一些渠道数据获取采集的难度越来越大

数据获取时间长,难以保证时效性!如果在短时间内需要的数据量庞大,并且及时性高!导致爬取到数据的时间过长,难以将数据实时的流转并供给业务分析应用。数据产生的时间过长,导致数据的时效价值被严重降低

数据源防护技术加大采集数据的难度!越来越多的网站具有大数据防护技术,并不断更新增强反爬策略,以及各国加大对隐私信息的保护,这些措施都在不断加大数据采集的难度

3. 基础架构

  既然是分布式系统,那么爬虫肯定是比较多的,这些爬虫的任务必须分配到多台机器上执行。所以这些爬虫程序如何部署?部署在哪?当然是容器里面,为了更加便捷的部署、拓展与管理、Kubernetes+Docker将会成为分布式爬虫采集系统中基础架构承载底座!

在这里插入图片描述

4. 爬取管理

  • 爬虫状态:爬虫分布式在很多台服务器上,不知道在哪个服务器上的哪个爬虫程序出了问题是很痛苦的事情,甚至抓取数据量猛增导致服务器挂掉都不知道。所以,需要能对服务器监控,对服务器上每一个爬虫程序进行监控。监控每个爬虫运行是否正常,监控每个运行爬虫的服务器是否正常

  • 采集状态:抓取的站点时常发生变化,我们就需要知道每个目标采集的站点抓取的数据是否都正常的采集下来了,通过给每个爬虫编上采集任务编号,展示在web界面上,就可以直观的看见数据采集下来的效果。通过邮件告警和每天发送邮件统计数据,可以实时对采集状态进行监控

  • 任务调度:任务调度模块实现数据爬取任务的分布式任务调度,包括添加、执行、监控、停止、删除爬虫的这些功能。系统能够自动根据任务优先级和资源状态进行任务分配和任务调整,在数据爬取任务发,可以看看我之前写的关于Scrapyd爬虫部署的文章:Scrapyd核心源码剖析及爬虫项目实战部署

  • 资源管理:资源管理是对某些站点的账号资源、IP 资源和采集节点等与采集相关的资源信息的集中管理

  • 状态监测:状态监测模块提供对网页页面改版、网页反爬策略、节点运行状态和数据产量等进行告警的功能,并以通知的方式实时推送到web前端,可以看看之前我写的这篇告警设计文章:【爬虫系统设计系列】好的爬虫系统一定要这样去设计告警功能)

5. 数据采集

  • 模板配置:例如新闻这类的网站源,页面的结构基本都是一样的,列表到详情页。可以采用模板配置的方案交给XPATH工程师,模板爬虫功能设计可以参考我的这篇文章【爬虫系统设计系列】模板爬虫的动态配置策略设计与实现

  • 可视化采集:爬取难度低的这类网站可以通过可视化配置的方式,所见即所得通过点击页面生成爬虫工程的方式。感兴趣的可以去看看开源可视化爬虫项目:可视化爬虫-Portia

  • 人工配置:这类网站一般难度较高、需要定制化开发、更新频率高!

  • 智能解析:像新闻、小说、应用市场这些页面特征相似的网站可以采用通用抽取算法!

在这里插入图片描述

6. 增量与去重设计

  这一部分可以说是非常重要也是经常接触的,除了一次性爬虫外几乎都要添加去重的功能,有的则需要定期或实时增量爬取

  • 增量设计:可以根据时间,记录最新更新的时间,这个是比较常见的,或者说咱们对页面的内容计算哈希值,将哈希值与上次爬取时存储的哈希值进行比较,不同则更新!

  • 去重设计:可以根据URL、数据内容计算指纹!可以使用Bloom或者是Set具体根据实际的业务场景跟数据体量去做一个技术选型

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

相关文章:

从0到1构建智能分布式大数据爬虫系统

文章目录 1. 写在前面2. 数据获取挑战3. 基础架构4. 爬取管理5. 数据采集6. 增量与去重设计 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐…...

C语言速通笔记(41-62)

40.十六进制转义字符:\x6d才是合法的,前面的0不能写,而且 x 是小写 41.字符型和整型是近亲:两个具有很大的相似之处,所有的字符都有一个它对应的整形数 据的 ASCLL 的数值。如 char a 65 % …...

Python 调用企业微信群机器人发送消息及文件

Python 操作企业微信群机器人。 企业微信群创建机器人 : 安装 requests json : pip install requests pip install json发送消息(markdown) import requests import json# 企业微信机器人发送文字 def send_markdown (message, …...

数据结构:链表应用:第6关:链表的分解

任务描述 本关任务:利用单链表A表示一个非零整数序列,把A分解为两个具有相同结构的链表B和C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点。要求空间复杂度为O(1),链表B和C均利用链表A的结点…...

10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)

概念: 交叉验证法,就是把一个大的数据集分为 k个小数据集,其中 k − 1 个作为训练集,剩下的 1 个作为测试集,在训练和测试的时候依次选择训练集和它对应的测试集。这种方法也被叫做 k 折交叉验证法(k-fold…...

中小企业:理解CRM与ERP系统的区别与联系,提升业务效能

许多中小型企业正面临着客户递增,市场营销,货存流通等递增数据整合的困扰。这个时候需要根据自身企业的实际情况去选择适合自己的系统。那么,中小企业使用CRM系统和erp系统的区别是什么? 一、含义和目标区别 CRM系统旨在帮助企业…...

01数仓平台 Hadoop介绍与安装

Hadoop概述 Hadoop 是数仓平台的核心组件。 在 Hadoop1.x 时代,Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源调度,耦合性较大。在 Hadoop2.x 时代,增加了 Yarn。Yarn 只负责资源的调度,MapReduce 只负责运算。Hadoop3.x 在…...

网络编程HTTP协议进化史

一、Http报文格式 具有约定格式的数据块 请求报文 request 状态行:本次请求的请求方式(post get)资源路径url http 协议的版本号,中间用空格划分 本次请求的请求方式(post get)资源路径url http 协议…...

第17章 匿名函数

第17.1节 匿名函数的基本语法 [捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 { // 函数体 }语法规则:lambda表达式可以看成是一般函数的函数名被略去,返回值使用了一个 -> 的形式表示。唯一与普通函数不同的是增加了“捕获列表”。 …...

JVM虚拟机:JVM参数之标配参数

本文重点 本文我们将学习JVM中的标配参数 标配参数 从jdk刚开始就有的参数,比如: -version -help -showversion...

UEC++ 探索虚幻5笔记(捡金币案例) day12

吃金币案例 创建金币逻辑 之前的MyActor_One.cpp,直接添加几个资源拿着就用 //静态网格UPROPERTY(VisibleAnywhere, BlueprintReadOnly)class UStaticMeshComponent* StaticMesh;//球形碰撞体UPROPERTY(VisibleAnywhere, BlueprintReadWrite)class USphereCompone…...

Docker 安装 Redis 挂载配置

1. 创建挂载文件目录 mkdir -p /home/redis/config mkdir -p /home/redis/data # 创建配置文件:docker容器中默认不包含配置文件 touch /home/redis/config/redis.conf2. 书写配置文件 # Redis 服务器配置# 绑定的 IP 地址,默认为本地回环地址 127.0.0…...

Java操作Excel之 POI介绍和入门

POI是Apache 提供的一个开源的Java API,用于操作Microsoft文档格式,如Excel、Word和PowerPoint等。POI是Java中处理Microsoft文档最受欢迎的库。 截至2023/12, 最新版本时 POI 5.2.5。 JDK版本兼容 POI版本JDK版本4.0及之上版本> 1.83.…...

麒麟v10 数据盘初始化 gpt分区

麒麟v10 数据盘初始化 gpt分区 1、查看磁盘 lsblk2 、分区 parted2.1、 设置磁盘分区形式2.2、 设置磁盘的计量单位为磁柱2.3、 分区2.4、 查看分区 3、分区格式化4、 挂载磁盘4.1、新建挂载目录4.2、挂载磁盘4.3、查看挂载结果 5、设置开机自动挂载磁盘分区5.1、 查询磁盘分区…...

php时间和centos时间不一致

PHP 时间和 CentOS 操作系统时间不一致的问题通常是由于时区设置不同造成的。解决这个问题可以通过以下几个步骤: 检查 CentOS 系统时间: 你可以通过在终端运行命令 date 来查看当前的系统时间和时区。 配置 CentOS 的时区: 如果系统时间不正…...

软件工程 复习笔记

目录 概述 软件的定义,特点和分类 软件的定义 软件的特点 软件的分类 软件危机的定义和表现形式 软件危机 表现形式 软件危机的产生原因及解决途径 产生软件危机的原因 软件工程 概念 软件工程的研究内容和基本原理 内容 软件工程的基本原理 软件过程…...

SpringBoot_02

Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件: application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件,优先级最高的是properties 配置文件优先级…...

实验报告-实验四(时序系统实验)

软件模拟电路图 说明 SW:开关,共六个Q1~Q3:输出Y0~Y3:输出 74LS194 首先,要给S1和S0高电位,将A~D的数据存入寄存器中(如果开始没有存入数据,那么就是0000在里面移位,不…...

PHP+ajax+layui实现双重列表的动态绑定

需求:商户下面有若干个门店,每个门店都需要绑定上收款账户 方案一:每个门店下面添加页面,可以选择账户去绑定。(难度:简单) 方案二:从商户进入,可以自由选择门店&#…...

菜鸟学习日记(python)——条件控制

Python 中的条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。 它的一般格式为:if...elif...else if condition1: #条件1CodeBlock1 #代码块1 elif condition2:CodeBlock2 else:CodeBlock3 如果con…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

什么是VR全景技术

VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

c# 局部函数 定义、功能与示例

C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...