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

【Python爬虫(43)】云端探秘:Python分布式爬虫部署攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。

目录

  • 一、引言
  • 二、AWS 上的分布式爬虫部署
    • 2.1 创建 EC2 实例
    • 2.2 与 EC2 实例通信
    • 2.3 环境部署
  • 三、阿里云上的分布式爬虫部署
    • 3.1 服务器配置与环境搭建
    • 3.2 安装 Python 及相关库
    • 3.3 部署 Scrapy - Redis 分布式爬虫
  • 四、腾讯云上的分布式爬虫部署
    • 4.1 选择服务器与远程登录
    • 4.2 安装部署工具 Scrapyd 与 Scrapyd - client
    • 4.3 使用 Scrapyd 部署爬虫项目
  • 五、利用云计算平台弹性计算资源
    • 5.1 弹性计算资源概述
    • 5.2 自动扩展节点数量的原理与实现
    • 5.3 实际应用案例与效果展示
  • 六、云计算平台上的成本管理与优化
    • 6.1 成本结构分析
    • 6.2 合理选择实例类型
    • 6.3 存储方案优化
    • 6.4 成本监控与动态调整策略
  • 七、总结与展望
    • 7.1 部署要点回顾
    • 7.2 未来发展趋势探讨


一、引言

在数据驱动的时代,数据如同石油一般,成为了众多企业和开发者的宝贵资产。Python 爬虫作为获取数据的有力工具,在数据采集中扮演着至关重要的角色。然而,随着数据量的爆炸式增长和对数据时效性要求的不断提高,单台机器的爬虫处理能力逐渐显得力不从心。分布式爬虫应运而生,通过将爬取任务分配到多个节点并行执行,大大提高了爬取效率。

与此同时,云计算技术的飞速发展为分布式爬虫提供了强大的支持。主流云计算平台,如 AWS(亚马逊云服务)、阿里云、腾讯云等,凭借其弹性计算资源、高可用性、便捷的管理界面等优势,成为了部署分布式爬虫的理想选择。利用云计算平台,开发者可以快速搭建和扩展爬虫集群,无需担心硬件设备的采购、维护等繁琐问题,降低了开发成本和技术门槛。

在本文中,我们将深入探讨如何在主流云计算平台上部署分布式爬虫,充分利用云计算平台的弹性计算资源实现自动扩展节点数量,以及如何进行成本管理与优化,帮助大家在享受云计算带来便利的同时,以最小的成本获取最大的收益。

二、AWS 上的分布式爬虫部署

2.1 创建 EC2 实例

在 AWS 上部署分布式爬虫,首先需要创建 EC2(Elastic Compute Cloud)实例。EC2 是 AWS 提供的一种弹性计算服务,它允许用户在云端创建和运行虚拟机,为爬虫程序提供运行环境。

  1. 注册 AWS 账号:如果您还没有 AWS 账号,需要先访问 AWS 官方网站(https://aws.amazon.com/ )进行注册。注册过程中需要提供一些个人和支付信息,完成注册后即可登录 AWS 管理控制台。
  2. 进入 EC2 服务:登录 AWS 管理控制台后,在控制台的左上角找到 “服务” 菜单,点击展开后在 “计算” 类别中选择 “EC2”,进入 EC2 服务页面。
  3. 创建新实例:在 EC2 服务页面中,点击 “启动实例” 按钮开始创建新的 EC2 实例。
  4. 选择操作系统:在 “选择 AMI(Amazon Machine Image)” 步骤中,AWS 提供了多种预配置的操作系统镜像供选择,常见的有 Amazon Linux、Ubuntu Server、Windows Server 等。对于 Python 爬虫部署,建议选择 Linux 系统,如 Amazon Linux 或 Ubuntu Server,它们对 Python 环境的支持较好,且资源消耗相对较低。这里我们以 Amazon Linux 为例进行后续操作。
  5. 配置实例类型:在 “选择实例类型” 步骤中,AWS 提供了丰富的实例类型,每种类型具有不同的计算能力、内存大小、存储容量和网络性能等。实例类型的选择应根据爬虫任务的规模和资源需求来决定。例如,对于小型爬虫项目,t2.micro 等免费套餐内的实例类型可能就足够;而对于大规模、高并发的分布式爬虫项目,则可能需要选择计算能力更强、内存更大的实例类型,如 c5.xlarge、m5.large 等。在选择实例类型时,还可以参考 AWS 官方提供的实例类型比较文档,以便做出更合适的选择 。
  6. 配置实例:在 “配置实例” 步骤中,可以对实例的一些基本设置进行调整,如网络设置、存储设置等。默认情况下,选择默认的网络设置和存储设置即可满足大部分需求。如果有特殊的网络需求,如需要将实例部署在特定的虚拟私有云(VPC)或子网中,可以在此处进行相应配置。
  7. 添加存储:根据爬虫任务可能产生的数据量,适当增加存储容量。如果需要存储大量的爬取数据,可以选择添加额外的 EBS(Elastic Block Store)卷,并设置合适的存储类型和大小。
  8. 添加标签:为实例添加一些有意义的标签,如名称、用途、所属项目等,方便后续对实例进行管理和识别。例如,可以添加一个名为 “Name” 的标签,值为 “DistributedCrawlerNode”,表示这是一个分布式爬虫节点实例。
  9. 配置安全组:安全组是一个虚拟的防火墙,用于控制进出实例的网络流量。在配置安全组时,需要添加规则允许必要的流量进入实例。对于爬虫实例,通常需要开放 SSH(端口 22)用于远程连接和管理,还可能需要开放其他端口,如爬虫程序使用的端口(例如,如果使用 Scrapy 框架的默认端口 6800 进行分布式爬虫管理,就需要开放该端口)。可以选择创建新的安全组并配置规则,也可以选择使用现有的安全组,但要确保其规则满足爬虫实例的网络需求。
  10. 审核与启动:完成上述所有设置后,点击 “审核和启动” 按钮,仔细检查配置信息是否正确。确认无误后,点击 “启动” 按钮。此时会弹出一个对话框,要求选择或创建密钥对。密钥对用于通过 SSH 远程连接到实例,务必妥善保存私钥文件(.pem 文件),如果丢失将无法再次下载。选择现有密钥对或创建新的密钥对后,点击 “启动实例”,等待实例创建完成。

2.2 与 EC2 实例通信

创建好 EC2 实例后,需要通过 SSH(Secure Shell)与实例进行通信,以便在实例上进行后续的环境部署和爬虫程序运行等操作。

  1. 获取实例的公网 IP 地址:在 EC2 服务页面的 “实例” 列表中,找到刚刚创建的实例,在实例的详情信息中可以找到其公网 IP 地址。这个 IP 地址将用于 SSH 连接。
  2. 本地系统连接方式
    • Windows 系统:Windows 系统没有内置的 SSH 客户端,推荐使用 MobaXterm 工具进行 SSH 连接。首先下载并安装 MobaXterm(下载地址:https://mobaxterm.mobatek.net/download.html )。安装完成后打开 MobaXterm,点击 “Session” 按钮,在弹出的对话框中选择 “SSH” 选项卡。在 “Remote host” 栏中输入 EC2 实例的公网 IP 地址,在 “Specify username” 栏中输入实例的用户名(对于 Amazon Linux 系统,默认用户名通常为 ec2-user;对于 Ubuntu Server 系统,默认用户名通常为 ubuntu),端口号保持默认的 22。然后点击 “Advanced SSH settings”,勾选 “Use private key”,并选择之前下载保存的私钥文件(.pem 文件)。最后点击 “OK” 按钮进行连接。如果连接过程中提示 “Are you sure you want to continue connecting (yes/no)”,输入 “yes” 并回车即可完成连接。
    • Mac 系统:Mac 系统自带 SSH 客户端,可以直接在终端中使用 SSH 命令进行连接。打开终端,输入以下命令:ssh -i /path/to/your/private_key.pem username@public_ip_address,其中/path/to/your/private_key.pem是私钥文件的路径,username是实例的用户名,public_ip_address是实例的公网 IP 地址。同样,如果提示 “Are you sure you want to continue connecting (yes/no)”,输入 “yes” 并回车即可连接到实例。

2.3 环境部署

连接到 EC2 实例后,接下来需要进行 Python 爬虫环境的部署。

  1. 查看实例类型:在实例中,可以通过命令查看当前实例的类型等信息。例如,对于 Linux 系统,可以使用以下命令查看实例的 CPU 信息:lscpu,查看内存信息:free -h,这些信息有助于了解实例的硬件配置,以便更好地进行环境配置和爬虫任务优化。
  2. 安装 Miniconda:Miniconda 是一个轻量级的 Python 发行版,包含了 Python 解释器和 Conda 包管理器,非常适合用于搭建 Python 开发环境。首先,在 Miniconda 官方网站(https://docs.conda.io/en/latest/miniconda.html )上找到适合 Linux 系统的 Miniconda 安装包下载链接(通常是一个以.sh 结尾的文件)。然后在实例中使用wget命令下载安装包,例如:wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh。下载完成后,运行安装脚本:bash Miniconda3-latest-Linux-x86_64.sh,按照安装向导的提示进行安装,过程中可以选择安装路径等选项,默认安装路径即可满足大部分需求。安装完成后,将 Miniconda 的 bin 目录添加到系统环境变量中,编辑~/.bashrc文件,在文件末尾添加export PATH=~/miniconda3/bin:$PATH,然后执行source ~/.bashrc使环境变量生效。最后,输入conda --version检查是否安装成功,如果输出版本号则表示安装成功。
  3. 配置 Python 环境:使用 Conda 创建一个新的 Python 环境,以隔离爬虫项目的依赖。例如,创建一个名为crawler_env的 Python 3.8 环境:conda create -n crawler_env python=3.8,创建过程中会提示确认安装一些依赖包,输入y并回车继续安装。创建完成后,激活该环境:conda activate crawler_env,激活后命令行的前缀会显示当前环境的名称,表示已进入该环境。
  4. 安装爬虫所需库和工具:在激活的 Python 环境中,使用pip或conda安装爬虫所需的各种库和工具。例如,安装常用的爬虫框架 Scrapy:pip install scrapy,安装用于解析 HTML 和 XML 的库 BeautifulSoup:pip install beautifulsoup4,安装用于处理 HTTP 请求的库 Requests:pip install requests。如果爬虫需要模拟浏览器行为,还需要安装 Selenium 和相应的浏览器驱动,如 ChromeDriver。首先安装 Selenium:pip install selenium,然后根据 Chrome 浏览器的版本下载对应的 ChromeDriver,下载地址为:http://chromedriver.storage.googleapis.com/index.html 。下载完成后,将 ChromeDriver 解压并放置到合适的目录,如/usr/local/bin,并确保该目录在系统的PATH环境变量中,以便 Selenium 能够找到它。

通过以上步骤,就完成了在 AWS 的 EC2 实例上的分布式爬虫环境部署,后续可以将编写好的分布式爬虫程序上传到实例中并运行。

三、阿里云上的分布式爬虫部署

3.1 服务器配置与环境搭建

在阿里云上部署分布式爬虫,首先要进行服务器配置与环境搭建。

  1. 购买阿里云 ECS 实例:登录阿里云官网(https://www.aliyun.com/ ),进入控制台。在产品与服务中找到 “弹性计算 ECS”,点击进入 ECS 管理页面。在创建实例时,需要进行一系列配置。
    • 选择地域:根据目标数据的来源和用户分布,选择距离较近的地域,以减少网络延迟。例如,如果主要爬取国内网站的数据,可选择 “华东 1(杭州)” 等国内地域。
    • 选择实例规格:参考 AWS 部署部分对实例类型选择的分析,根据爬虫任务的规模和资源需求来决定。对于一般的分布式爬虫项目,如计算型 c5 系列、通用型 g5 系列等实例规格都能满足需求。例如,c5.large 实例具有 2 核 CPU 和 4GB 内存,适用于中等规模的爬虫任务。
    • 选择镜像:阿里云提供了多种操作系统镜像,包括 CentOS、Ubuntu、Windows Server 等。对于 Python 爬虫,推荐选择 CentOS 系统,它具有良好的稳定性和对开源软件的支持。在镜像列表中找到 CentOS 镜像,选择合适的版本,如 CentOS 7.9 64 位。
    • 配置存储:根据爬取数据量的预估,选择合适的系统盘和数据盘大小。系统盘一般选择 40GB 及以上即可满足基本需求,如果需要存储大量的爬取数据,可添加更大容量的数据盘,如 100GB 或更高,并可选择高效云盘、SSD 云盘等不同存储类型,SSD 云盘具有更高的 I/O 性能,适合对读写速度要求较高的爬虫任务。
    • 设置网络:默认选择使用默认的虚拟私有云(VPC)和交换机,如果有特殊的网络架构需求,也可以自定义 VPC 和交换机设置。同时,配置安全组规则,安全组相当于一个虚拟防火墙,控制着实例的网络访问。在安全组配置中,添加规则放行 SSH 端口(默认为 22),以便通过 SSH 远程连接到服务器进行管理;如果爬虫程序使用特定端口,如 Scrapy - Redis 分布式爬虫默认使用 6379 端口连接 Redis 服务器,也需要放行该端口。在安全组规则配置页面,选择 “入方向”,点击 “添加安全组规则”,在弹出的对话框中,配置端口范围、授权类型(一般选择 “0.0.0.0/0” 表示允许所有 IP 访问,在实际应用中可根据安全需求限制访问 IP 范围)等信息,然后点击 “确定” 完成规则添加。
  1. 连接到 ECS 实例:购买完成后,在 ECS 管理控制台的实例列表中,找到刚创建的实例,记录其公网 IP 地址。使用 SSH 客户端连接到实例,对于 Windows 系统,推荐使用 Xshell 工具(下载地址:https://www.netsarang.com/zh/xshell-download/ )。打开 Xshell,点击 “新建” 按钮,在弹出的 “新建会话属性” 对话框中,输入实例的公网 IP 地址作为主机名,端口号保持默认的 22。然后点击 “用户身份验证” 选项卡,输入用户名(对于 CentOS 系统,默认用户名通常为 root)和购买实例时设置的密码,点击 “确定”。在 Xshell 主界面中,选中刚才创建的会话,点击 “连接” 即可连接到 ECS 实例。对于 Mac 系统,可直接在终端中使用ssh root@public_ip_address命令进行连接,输入密码后即可登录。
  2. 更新系统和安装基础软件:连接到实例后,首先更新系统软件包,运行命令sudo yum update,该命令会从软件源获取最新的软件包信息,并更新系统中已安装的软件包到最新版本,以确保系统的安全性和稳定性。然后安装一些基础软件,如 vim(一款强大的文本编辑器,用于编辑配置文件等)、wget(用于从网络下载文件)、git(版本控制系统,方便管理爬虫项目代码)等,运行命令sudo yum install vim wget git,按照提示输入y确认安装。

3.2 安装 Python 及相关库

在完成服务器基础环境搭建后,接下来安装 Python 及相关爬虫库。

  1. 安装 Python 3:CentOS 系统默认安装的是 Python 2,但为了使用更丰富的新特性和库,我们安装 Python 3。可以通过编译安装的方式获取最新版本的 Python 3。首先,安装编译所需的依赖包,运行命令sudo yum install gcc gcc - c++ make cmake zlib - devel bzip2 - devel openssl - devel ncurses - devel libffi - devel,这些依赖包包含了编译 Python 所需的编译器、开发库等工具。然后,到 Python 官方网站(https://www.python.org/downloads/ )下载 Python 3 的安装包,例如下载 Python 3.10.4 版本,使用wget命令下载:wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz。下载完成后,解压安装包:tar -zxvf Python-3.10.4.tgz,进入解压后的目录:cd Python-3.10.4。接着进行配置和编译安装,运行命令./configure --prefix=/usr/local/python3,–prefix参数指定了 Python 的安装路径为/usr/local/python3,这样可以避免与系统自带的 Python 2 冲突。配置完成后,运行make && make install命令进行编译和安装,这个过程可能需要一些时间,根据服务器性能不同,耗时可能在几分钟到十几分钟不等。安装完成后,为了方便使用 Python 3 命令,创建软链接,运行命令sudo ln -s /usr/local/python3/bin/python3.10 /usr/bin/python3,这样就可以在命令行中直接使用python3命令来启动 Python 3 解释器。同样,为pip3(Python 3 的包管理工具)创建软链接:sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3。
  2. 安装爬虫相关库:使用pip3安装爬虫所需的各种库。例如,安装 Scrapy 爬虫框架:pip3 install scrapy;安装scrapy - redis用于实现分布式爬虫:pip3 install scrapy - redis;安装requests库用于发送 HTTP 请求:pip3 install requests;安装beautifulsoup4库用于解析 HTML 和 XML 页面:pip3 install beautifulsoup4。如果爬虫需要处理验证码等复杂情况,可能还需要安装pytesseract(用于 OCR 识别)及相关的图像库,如Pillow:pip3 install pytesseract Pillow,同时需要安装 Tesseract OCR 引擎,在 CentOS 系统中可以通过yum install tesseract - ocr命令进行安装。

3.3 部署 Scrapy - Redis 分布式爬虫

Scrapy - Redis 是基于 Redis 的 Scrapy 分布式组件,利用它可以轻松实现分布式爬虫。

  1. 安装 Redis:在作为主机(用于存储爬取任务队列和去重指纹等)的服务器上安装 Redis。使用yum命令安装 Redis,运行sudo yum install redis,安装完成后,编辑 Redis 配置文件,sudo vim /etc/redis.conf。在配置文件中,将bind 127.0.0.1这一行注释掉,这样 Redis 就可以接受来自其他主机的连接请求;将protected - mode yes改为protected - mode no,关闭保护模式(在生产环境中,应根据安全需求进行更严格的安全配置,如设置密码等)。修改完成后,保存并退出配置文件,然后启动 Redis 服务:sudo systemctl start redis,并设置为开机自启动:sudo systemctl enable redis。
  2. 安装 Scrapy - Redis:在所有参与分布式爬虫的主机和从机上安装scrapy - redis库,如前文所述,使用pip3 install scrapy - redis命令进行安装。
  3. 配置爬虫项目:在爬虫项目的settings.py文件中进行如下配置,使其支持分布式爬取。首先,修改调度器为scrapy - redis提供的调度器,添加SCHEDULER = “scrapy_redis.scheduler.Scheduler”;修改去重过滤器为scrapy - redis的去重过滤器,添加DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”;配置 Redis 的连接信息,例如,如果 Redis 服务器的 IP 地址为192.168.0.100,端口为默认的 6379,无密码认证,添加REDIS_URL =‘redis://192.168.0.100:6379’(如果有密码,格式为redis://:password@192.168.0.100:6379)。还可以根据需求配置其他参数,如开启调度器持久化,添加SCHEDULER_PERSIST = True,这样在爬虫关闭时,任务队列和去重信息不会被删除,下次启动爬虫可以继续未完成的任务。
  4. 启动分布式爬虫:在主机上启动 Redis 服务后,在各个从机上启动爬虫项目,例如,进入爬虫项目目录,运行scrapy crawl spider_name(spider_name为爬虫的名称)。此时,各个从机上的爬虫会连接到主机的 Redis 服务器,从任务队列中获取爬取任务,实现分布式爬取。在爬取过程中,可以通过 Redis 客户端工具(如redis - cli)查看任务队列的状态和爬取进度等信息。例如,使用llen <queue_name>命令可以查看任务队列的长度(<queue_name>为爬虫在 Redis 中使用的任务队列名称,默认为scrapy:requests) 。

四、腾讯云上的分布式爬虫部署

4.1 选择服务器与远程登录

  1. 注册登录腾讯云:访问腾讯云官网(https://cloud.tencent.com/ ),通过微信扫码、邮箱注册或 QQ 注册等方式完成账号注册,并进行实名认证。实名认证是使用腾讯云服务的必要步骤,个人用户可通过微信扫码或邮箱注册后完成实名认证;企业用户则需要进行企业实名认证,支持企业法人微信扫码认证、企业法人人脸识别认证等多种方式 。
  2. 选择服务器实例:登录腾讯云控制台后,在产品与服务中找到 “云服务器 CVM”,点击进入云服务器管理页面。在创建实例时,需要进行多方面配置。
    • 地域选择:依据爬虫目标数据的来源和访问需求,选择合适的地域。例如,若主要爬取国内南方地区网站的数据,可选择 “广州” 地域,以减少网络延迟,提升数据传输速度。
    • 实例规格确定:参考前文对实例规格选择的考量因素,结合爬虫任务的资源需求来挑选。对于一般规模的分布式爬虫项目,标准型 S5 系列实例是不错的选择。例如,S5.SMALL2 实例具备 1 核 CPU 和 2GB 内存,能满足一些小型分布式爬虫任务的基本计算和内存需求;若爬虫任务规模较大、数据处理量较多,可选择 S5.LARGE8 等更高配置的实例,其拥有 4 核 CPU 和 8GB 内存,可支持更复杂的爬虫任务并行处理 。
    • 镜像挑选:腾讯云提供了丰富的镜像资源,涵盖多种操作系统和应用环境。对于 Python 爬虫部署,推荐选择 Ubuntu Server 镜像,它对 Python 生态系统的兼容性良好,且开源社区资源丰富,便于解决可能遇到的技术问题。在镜像列表中找到合适版本的 Ubuntu Server 镜像,如 Ubuntu 20.04 64 位。
    • 存储设置:根据爬取数据量的预估来配置存储。系统盘一般选择 50GB 及以上即可满足基本系统和软件安装需求;若需要存储大量爬取的数据,可添加数据盘,腾讯云提供了高性能云硬盘、SSD 云硬盘等多种存储类型。对于对读写速度要求较高的爬虫任务,如实时采集大量数据的场景,可选择 SSD 云硬盘,其具备更高的 I/O 性能,能快速读写数据,确保爬虫任务高效运行 。
    • 网络配置:默认使用腾讯云提供的默认虚拟私有云(VPC)和子网配置,若有特殊的网络架构和安全需求,也可自定义 VPC 和子网设置。同时,配置安全组规则,安全组类似于防火墙,用于控制实例的网络访问。在安全组中添加规则放行 SSH 端口(默认为 22),以便通过 SSH 远程连接到服务器进行管理和操作;如果爬虫程序使用特定端口,如 Scrapyd 服务默认使用 6800 端口,也需要在安全组中放行该端口,确保外部能够访问到爬虫服务。在安全组规则配置页面,选择 “入方向”,点击 “添加规则”,在弹出的对话框中,配置端口范围、授权类型(如选择 “0.0.0.0/0” 表示允许所有 IP 访问,在实际应用中可根据安全策略限制访问 IP 范围)等信息,然后点击 “确定” 完成规则添加 。
  1. 获取公网 IP 地址与远程登录:完成实例创建后,在云服务器管理控制台的实例列表中,找到刚创建的实例,记录其公网 IP 地址。使用 SSH 客户端连接到实例,对于 Windows 系统,推荐使用 PuTTY 工具(下载地址:https://www.putty.org/ )。打开 PuTTY,在 “Host Name (or IP address)” 栏中输入实例的公网 IP 地址,端口号保持默认的 22。然后点击 “Open” 按钮,首次连接时会弹出提示框,提示是否信任该服务器的密钥,点击 “是” 继续。在弹出的登录界面中,输入用户名(对于 Ubuntu Server 系统,默认用户名通常为 ubuntu)和创建实例时设置的密码,即可成功登录到服务器。对于 Mac 系统,可直接在终端中使用ssh ubuntu@public_ip_address命令进行连接,输入密码后登录。

4.2 安装部署工具 Scrapyd 与 Scrapyd - client

  1. 远端服务器安装 Scrapyd:连接到腾讯云服务器后,在服务器终端中安装 Scrapyd。首先更新系统软件包,运行命令sudo apt update,确保系统软件包为最新版本,以获取更好的兼容性和安全性。然后使用pip安装 Scrapyd,运行命令sudo pip install scrapyd,安装过程中pip会自动下载并安装 Scrapyd 及其依赖项。安装完成后,可以通过运行scrapyd命令启动 Scrapyd 服务,启动成功后,会显示相关日志信息,如 “2024 - 10 - 10T12:00:00+0800 [-] Loading /usr/local/lib/python3.8/dist-packages/scrapyd/txapp.py…”,此时可以在浏览器中访问http://服务器公网IP:6800(默认端口为 6800),如果能看到 Scrapyd 的 Web 界面,则说明安装和启动成功。
  2. 本地机器安装 Scrapyd - client:在本地开发机器上,同样使用pip安装 Scrapyd - client,运行命令pip install scrapyd-client。安装成功后,会生成一个可用命令scrapyd-deploy,用于与远端的 Scrapyd 服务进行交互。可以通过运行scrapyd-deploy -h命令来验证安装是否成功,如果显示出scrapyd-deploy的帮助信息,则说明安装正确。
  3. 配置项目文件:在本地爬虫项目目录中,找到并编辑scrapy.cfg文件。该文件是 Scrapy 项目的配置文件,用于配置项目的部署信息。将scrapy.cfg文件中的[deploy]部分进行如下修改:
[deploy]
# 服务器别名,可自定义
url = http://服务器公网IP:6800/
# 项目名称,需与实际项目名称一致
project = your_project_name

将http://服务器公网IP:6800/替换为实际腾讯云服务器的公网 IP 地址和端口(默认为 6800),your_project_name替换为实际的爬虫项目名称。这样配置后,scrapyd-deploy命令就知道将项目部署到哪个服务器以及对应的项目名称。

4.3 使用 Scrapyd 部署爬虫项目

  1. 部署项目:在本地爬虫项目目录中,打开终端,运行scrapyd-deploy命令进行项目部署。例如,如果在scrapy.cfg文件中配置的服务器别名为tencent_server,项目名称为my_crawler_project,则运行命令scrapyd-deploy tencent_server -p my_crawler_project。执行该命令后,scrapyd-deploy会将本地的爬虫项目打包成 Egg 文件,并上传到远端的 Scrapyd 服务器上。上传成功后,会显示类似 “Packing version 1634567890 Deploying to project “my_crawler_project” in http:// 服务器公网 IP:6800/addversion.json Server response (200): {“status”: “ok”, “project”: “my_crawler_project”, “version”: “1634567890”, “spiders”: 2, “node_name”: “VM_123_456”}的信息,表明项目部署成功,其中status为ok表示部署状态正常,spiders` 表示项目中包含的爬虫数量 。
  2. 启动爬虫:项目部署成功后,可以使用 Scrapyd 提供的 HTTP 接口来启动爬虫。使用curl命令发送 HTTP POST 请求到 Scrapyd 的schedule.json接口来启动爬虫。例如,要启动my_crawler_project项目中的my_spider爬虫,运行命令curl http://服务器公网IP:6800/schedule.json -d project=my_crawler_project -d spider=my_spider。执行该命令后,如果爬虫启动成功,会返回类似{“status”: “ok”, “jobid”: “123456789abcdef”, “node_name”: “VM_123_456”}的信息,其中jobid是本次爬虫任务的唯一标识,可用于后续对任务的管理和监控 。
  3. 停止爬虫:如果需要停止正在运行的爬虫,可以使用curl命令发送 HTTP POST 请求到 Scrapyd 的cancel.json接口。例如,要停止my_crawler_project项目中jobid为123456789abcdef的爬虫任务,运行命令curl http://服务器公网IP:6800/cancel.json -d project=my_crawler_project -d job=123456789abcdef。执行命令后,如果停止成功,会返回{“status”: “ok”, “prevstate”: “running”, “node_name”: “VM_123_456”}的信息,其中prevstate表示爬虫之前的运行状态 。
  4. 删除项目:若要删除部署在 Scrapyd 服务器上的爬虫项目,使用curl命令发送 HTTP POST 请求到 Scrapyd 的delproject.json接口。例如,要删除my_crawler_project项目,运行命令curl http://服务器公网IP:6800/delproject.json -d project=my_crawler_project。执行命令后,若删除成功,会返回{“status”: “ok”, “node_name”: “VM_123_456”}的信息,表示项目已成功从服务器上删除 。

五、利用云计算平台弹性计算资源

5.1 弹性计算资源概述

云计算平台的弹性计算资源是指能够根据用户业务负载的变化,自动、快速地调整计算能力的资源。这种资源的特点在于其灵活性和可扩展性。在分布式爬虫部署中,弹性计算资源具有诸多显著优势。

从灵活性角度来看,它允许用户根据实际需求,在短时间内灵活调整计算资源的配置。例如,在进行大规模数据爬取任务时,可能需要在短时间内调用大量的计算资源来应对高并发的网页请求。而当爬取任务完成后,又可以迅速减少资源的使用,避免资源浪费。这种随用随取、用完即退的特性,大大提高了资源的利用效率。

从可扩展性方面来说,弹性计算资源能够根据负载动态调整资源。当爬虫系统面临大量的待爬取任务,导致负载增加时,弹性计算资源可以自动增加计算节点,如在 AWS 上自动创建更多的 EC2 实例,或者在阿里云上增加 ECS 实例的数量,从而提升系统的处理能力,确保爬虫任务能够高效完成。相反,当负载降低时,多余的计算资源又可以自动释放,降低成本。例如,在一些电商促销活动期间,需要爬取大量电商平台的商品信息,此时爬虫系统负载剧增,弹性计算资源能够快速扩展,满足数据爬取需求;而在促销活动结束后,负载降低,资源又能及时收缩,节省成本。

这种动态调整资源的能力,使得分布式爬虫在面对不同规模和复杂度的爬取任务时,都能保持高效稳定的运行状态,同时避免了因过度配置资源而造成的成本浪费,是云计算平台为分布式爬虫提供的强大支持之一。

5.2 自动扩展节点数量的原理与实现

  1. 自动扩展节点数量的原理
    • 监控负载指标:云计算平台通过各种监控工具,实时收集分布式爬虫系统的各项负载指标。这些指标包括但不限于 CPU 利用率、内存使用率、网络带宽占用、任务队列长度等。例如,AWS 的 CloudWatch 可以实时监控 EC2 实例的 CPU 利用率,当 CPU 利用率持续超过某个预设阈值(如 80%)时,就表明系统负载较高,可能需要增加计算资源。
    • 预测负载变化:基于收集到的负载指标数据,云计算平台利用机器学习算法或时间序列分析等技术,对未来的负载变化进行预测。例如,通过分析历史数据发现,每天上午 10 点到下午 2 点是爬虫任务的高峰期,负载通常会显著增加,那么系统就可以提前做好资源扩展的准备。这种预测功能可以帮助系统更及时、准确地应对负载变化,避免在负载突然增加时才进行资源扩展,从而提高系统的响应速度和稳定性。
    • 触发伸缩操作:当监控到的负载指标达到预设的扩展阈值,或者预测到未来负载将超过系统的处理能力时,就会触发自动伸缩操作。例如,在阿里云上,如果 ECS 实例的 CPU 利用率连续 5 分钟超过 85%,且任务队列中的待处理任务数量持续增加,就会触发自动扩展节点的操作。
    • 执行扩展或收缩:触发伸缩操作后,云平台会根据预设的策略执行扩展或收缩操作。在扩展时,会创建新的计算节点,如在腾讯云上启动新的云服务器实例,并将其加入到分布式爬虫集群中。同时,还会对新节点进行初始化配置,使其能够快速投入到爬虫任务中。在收缩时,会逐步停止并移除负载较低的计算节点,释放资源。在移除节点之前,会确保该节点上的所有任务都已完成或已被转移到其他节点上,以保证爬虫任务的连续性和数据的完整性。
  1. 主流云平台上实现自动扩展的方法
    • AWS 的 Auto Scaling:在 AWS 上,通过创建 Auto Scaling 组来实现自动扩展节点数量。首先,需要定义一个启动模板,该模板包含了创建新 EC2 实例所需的配置信息,如 AMI 镜像、实例类型、安全组等。然后,创建 Auto Scaling 组,并配置相关的伸缩策略。可以设置基于 CPU 利用率的策略,当 CPU 利用率超过 70% 时,自动增加一个 EC2 实例;当 CPU 利用率低于 30% 时,自动减少一个实例。还可以配置冷却时间,以避免在短时间内频繁地进行扩展和收缩操作,影响系统稳定性。
    • 阿里云的弹性伸缩(Auto Scaling):阿里云的弹性伸缩服务允许用户根据业务需求和策略自动调整 ECS 实例的数量。用户需要创建伸缩组,指定伸缩配置,包括基础配置(如镜像、实例规格等)和网络配置。然后,设置伸缩规则,如基于监控指标(如 CPU 使用率、内存使用率等)的动态规则,或者基于时间的定时规则。当满足伸缩规则的条件时,弹性伸缩服务会自动创建或释放 ECS 实例,实现节点数量的自动扩展和收缩。
    • 腾讯云的弹性伸缩:腾讯云的弹性伸缩功能同样支持根据预设的策略自动调整云服务器实例的数量。用户在腾讯云控制台创建弹性伸缩组,配置伸缩配置,包括实例的基本信息、网络设置等。接着,设置伸缩策略,例如基于负载均衡器的请求数、CPU 利用率等指标来触发伸缩操作。腾讯云还提供了健康检查功能,确保新创建的实例能够正常运行,并且在实例出现故障时及时进行替换,保证分布式爬虫系统的高可用性。

5.3 实际应用案例与效果展示

假设某电商数据分析公司需要实时爬取各大电商平台的商品信息,以进行价格比较、销售趋势分析等业务。他们使用了基于 AWS 的分布式爬虫系统,并利用 AWS 的弹性计算资源实现自动扩展节点数量。

在电商促销活动期间,如 “双 11”“618” 等,电商平台的商品数据量急剧增加,访问量也大幅上升。此时,爬虫系统的负载急剧增大,原本的计算节点无法满足大量的爬取任务需求。通过 AWS 的 Auto Scaling 功能,系统自动监测到 CPU 利用率持续超过 80%,任务队列长度不断增加。于是,Auto Scaling 组根据预设策略,在短时间内自动创建了 10 个新的 EC2 实例,并将其加入到分布式爬虫集群中。

这些新节点迅速投入工作,与原有的节点一起并行处理爬取任务。结果显示,爬虫系统的爬取速度得到了显著提升。原本在高负载情况下,每小时只能爬取 10 万条商品信息,在扩展节点后,每小时的爬取量增加到了 50 万条,大大提高了数据采集的效率。同时,由于及时扩展了节点,系统的响应时间也明显降低。在扩展前,平均响应时间为 5 秒,扩展后降低到了 2 秒以内,确保了数据的实时性和准确性,满足了电商数据分析公司对数据时效性的要求。

当促销活动结束后,系统负载逐渐降低,Auto Scaling 组监测到 CPU 利用率持续低于 30%,任务队列长度也大幅减少。于是,按照收缩策略,逐步停止并移除了 8 个多余的 EC2 实例,释放了资源,降低了成本。通过这次实际应用案例可以看出,利用云计算平台的弹性计算资源自动扩展节点数量,能够有效地提升分布式爬虫的性能,使其在面对不同负载情况时都能保持高效稳定的运行,为企业的业务发展提供有力支持。

六、云计算平台上的成本管理与优化

6.1 成本结构分析

在云计算平台上部署分布式爬虫,成本主要由以下几个部分构成:

  1. 计算资源成本:这是成本的主要组成部分,包括在 AWS 上创建的 EC2 实例、阿里云的 ECS 实例以及腾讯云的 CVM 实例等的费用。计算资源成本与实例的类型、数量、使用时长等因素密切相关。例如,AWS 的 c5.xlarge 实例每小时的费用会根据地域不同有所差异,在美东地区和亚太地区的价格可能不同。同时,使用的实例数量越多、使用时间越长,计算资源成本就越高。如果在促销活动期间,云平台可能会提供一定的折扣,从而降低计算资源成本。
  2. 存储成本:存储成本涵盖了多种存储类型的费用。在云平台上,常见的存储类型有对象存储(如 AWS 的 S3、阿里云的 OSS、腾讯云的 COS)、块存储(如 AWS 的 EBS、阿里云的云盘、腾讯云的云硬盘)等。对象存储通常按存储的数据量和请求次数计费,对于存储大量非结构化数据,如爬取的网页文本、图片等,成本相对较低。而块存储一般按存储容量和使用时长计费,适用于对数据读写性能要求较高的场景,如存储爬虫的中间数据或需要快速访问的数据库文件,其成本相对较高。
  3. 网络带宽成本:网络带宽成本取决于数据传输量和带宽大小。分布式爬虫在运行过程中,需要与目标网站进行大量的数据传输,同时各节点之间也需要进行数据交互,这些都会产生网络带宽费用。如果爬虫需要从国外网站获取数据,由于国际带宽价格相对较高,网络带宽成本会显著增加。云平台通常会提供不同带宽规格的选项,用户可以根据实际需求选择,带宽越大,成本越高。

6.2 合理选择实例类型

根据爬虫任务的特点和需求选择合适的云服务器实例类型,是降低成本的关键步骤。

  1. CPU 需求:如果爬虫任务需要进行大量的网页解析、数据处理等操作,对 CPU 性能要求较高。对于一些需要实时处理大量数据的爬虫项目,如实时新闻爬虫,需要快速解析和提取新闻内容,应选择 CPU 性能强劲的实例类型,如 AWS 的 C 系列计算优化型实例(如 c5n.2xlarge,具有 8 个 vCPU 和 16GB 内存,适用于计算密集型工作负载)、阿里云的计算型 c7 实例(如 c7.2xlarge,4 核 8GB,在计算性能上有较好的表现)。而对于一些简单的爬虫任务,如定期爬取少量固定网站的数据,对 CPU 性能要求较低,可以选择价格更为亲民的通用型实例,如 AWS 的 T 系列突发性能实例(如 t3.micro,1 核 1GB,适合轻度使用场景)、阿里云的通用型 g7 实例(如 g7.large,2 核 8GB,适用于多种应用场景,包括一般性的爬虫任务)。
  2. 内存需求:爬虫在运行过程中需要将网页内容、中间数据等加载到内存中进行处理,因此内存大小也会影响实例类型的选择。当爬虫需要处理大量的网页数据,或者在内存中进行复杂的数据计算和存储时,如爬取电商网站的商品信息并进行价格分析和比对,需要较大的内存来保证数据处理的效率和流畅性。此时应选择内存较大的实例类型,如腾讯云的标准型 S5 实例(如 S5.2XLARGE8,8 核 16GB,适合内存需求较大的应用场景)。而对于一些简单的爬虫任务,对内存需求较小,选择内存适中的实例即可,避免因内存配置过高而造成成本浪费。
  3. 存储需求:若爬虫需要存储大量的原始数据,如爬取的图片、视频等文件,应考虑选择具有较大本地存储或支持低成本大容量存储扩展的实例类型。某些云服务器提供了本地 NVMe SSD 存储,读写速度快且存储容量大,适合存储对读写性能要求高的爬虫数据。如果爬虫任务对存储性能要求不高,主要是存储大量的文本数据,可以选择支持对象存储扩展的实例,将数据存储到对象存储服务中,如 AWS 的 S3,利用其按存储量计费的特点,降低存储成本。

6.3 存储方案优化

选择合适的存储方案可以有效降低成本,以下是不同存储方案及其成本差异分析:

  1. 对象存储:对象存储以其高扩展性、低成本和高可用性,成为存储大规模非结构化数据的理想选择。在分布式爬虫中,爬取的网页文本、图片、音频等数据都可以存储在对象存储中。以 AWS 的 S3 为例,它提供了多种存储级别,如标准存储、标准 - 低频访问存储、智能分层存储、冰川存储等。标准存储适用于频繁访问的数据,成本相对较高;标准 - 低频访问存储适用于不经常访问,但需要快速访问的数据,成本比标准存储低;智能分层存储会根据数据的访问频率自动在不同存储层之间移动数据,成本介于标准存储和标准 - 低频访问存储之间;冰川存储则适用于长期归档的数据,成本最低,但数据恢复时间较长。对于爬虫产生的大量历史数据,如已经爬取且不经常访问的网页数据,可以选择存储在冰川存储中,以降低存储成本。
  2. 块存储:块存储提供了高性能的随机读写能力,适用于对数据读写性能要求较高的场景,如存储爬虫的中间数据、数据库文件等。然而,块存储的成本相对较高,通常按存储容量和使用时长计费。在 AWS 上,EBS 块存储的成本会因存储类型(如通用型 SSD、预配置 IOPS SSD、磁性存储等)和存储容量的不同而有所差异。如果爬虫任务对数据读写性能要求极高,如需要实时更新和查询数据库中的爬虫数据,可选择高性能的块存储;但如果对性能要求不是特别高,应谨慎使用块存储,避免不必要的成本支出。

根据数据特点选择存储方案时,对于经常访问、需要快速读取的数据,如爬虫的配置文件、正在处理的中间数据等,可选择性能较高的存储方案,如块存储或对象存储的标准存储级别;对于不经常访问的历史数据,可选择成本较低的存储方案,如对象存储的低频访问存储或归档存储级别。

6.4 成本监控与动态调整策略

利用云平台提供的成本监控工具,实时监控成本使用情况,并根据业务需求和成本变化动态调整资源配置,是实现成本优化的重要手段。

  1. 成本监控工具:各大云平台都提供了丰富的成本监控工具。AWS 的 Cost Explorer 可以直观地展示过去 13 个月的成本和使用情况,用户可以按服务、标签、时间等维度进行成本分析,了解各项成本的构成和变化趋势。例如,通过 Cost Explorer 可以查看 EC2 实例、S3 存储、网络带宽等服务的成本占比,以及不同时间段内成本的波动情况。阿里云的费用中心提供了成本分析、账单查询、费用预警等功能,用户可以实时监控云资源的使用费用,并设置费用预警阈值,当费用接近或超过阈值时,系统会及时发送通知,以便用户采取相应措施。腾讯云的费用管理模块同样提供了详细的成本监控和分析功能,支持按项目、资源类型等进行成本统计和分析。
  2. 动态调整资源配置:根据成本监控数据,当发现某些资源的使用效率较低或成本过高时,应及时调整资源配置。如果在监控过程中发现某个时间段内计算资源的利用率较低,如 EC2 实例的 CPU 利用率持续低于 30%,可以考虑减少实例数量或降低实例规格,以节省计算资源成本。相反,当爬虫任务量突然增加,导致资源不足,如任务队列中积压大量待处理任务,且 CPU 利用率持续超过 80% 时,应及时增加计算资源,以保证爬虫任务的正常运行。在存储方面,如果发现对象存储中的数据访问频率发生变化,如原本存储在标准存储中的数据访问频率降低,可以将其转换为低频访问存储或归档存储,以降低存储成本。

七、总结与展望

7.1 部署要点回顾

在主流云计算平台上部署分布式爬虫,需在 AWS、阿里云、腾讯云等平台完成一系列关键步骤。以 AWS 为例,要先创建 EC2 实例,精心选择合适的实例类型和操作系统镜像,细致配置网络和存储,同时妥善管理安全组规则,确保实例安全且能正常通信。创建完成后,利用 SSH 与实例建立连接,进而进行 Python 爬虫环境的部署,安装必要的库和工具,如 Miniconda、Scrapy 等,为爬虫运行奠定基础。

阿里云上,购买 ECS 实例时,要综合考虑地域、实例规格、镜像、存储和网络等因素,完成实例创建后,通过 SSH 连接进行系统更新和基础软件安装,随后安装 Python 及相关库,部署 Scrapy - Redis 分布式爬虫,实现高效的数据爬取。

腾讯云部署则需先注册登录,选择合适的服务器实例,完成实例创建后获取公网 IP 地址并远程登录。安装部署工具 Scrapyd 与 Scrapyd - client,通过配置项目文件使用 Scrapyd 部署爬虫项目,实现爬虫的启动、停止和项目删除等操作。

利用云计算平台的弹性计算资源,通过监控负载指标、预测负载变化,触发伸缩操作,实现自动扩展节点数量,提高爬虫系统的处理能力和效率。在成本管理与优化方面,深入分析成本结构,包括计算资源成本、存储成本和网络带宽成本等。根据爬虫任务特点合理选择实例类型,依据数据特点优化存储方案,利用云平台提供的成本监控工具实时监控成本使用情况,并动态调整资源配置,以降低成本。

7.2 未来发展趋势探讨

未来,分布式爬虫在云计算平台上有望与人工智能技术深度融合。借助人工智能和机器学习技术,爬虫能够自动识别网站的反爬虫机制,并动态调整策略以绕过限制。利用深度学习模型识别验证码,根据网站的响应自动优化请求参数和请求频率,使爬虫更加智能和高效 。

随着互联网的发展,网站的反爬虫机制也会越来越复杂。分布式爬虫需要不断进化,以应对更复杂的反爬虫机制。未来可能会出现更加智能的反反爬虫技术,通过模拟真实用户行为、动态调整 IP 地址和请求头信息等方式,提高爬虫的抗反爬能力。

云计算平台的服务和功能也在持续演进,未来将为分布式爬虫提供更强大的支持。更加灵活的弹性计算资源,更低的成本,以及更便捷的数据存储和处理服务,都将助力分布式爬虫的发展,使其在数据采集领域发挥更大的作用。

相关文章:

【Python爬虫(43)】云端探秘:Python分布式爬虫部署攻略

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

Java集合框架大师课:从青铜到王者的数据结构指南(一)

&#x1f680; Java集合框架大师课&#xff1a;从青铜到王者的数据结构指南&#xff08;一&#xff09; &#x1f31f; 系列定位&#xff1a;全网最懂小白的JCF实战教程 | 建议搭配IDE边学边练 &#x1f3af; 学习路线图 第一章&#xff1a;初识JCF江湖 1.1 什么是JCF&#xf…...

Vmware虚拟机Ubantu安装Docker、k8s、kuboard

准备工作: 切换用户&#xff1a;su root关闭防火墙: sudo ufw diasble关闭swap: systemctl stop swap.target systemctl status swap.target systemctl disable swap.target #开机禁用 systemctl stop swap.img.swap systemctl status swap.img.swap关闭虚拟交换分区 vim /…...

Java面试——Tomcat

优质博文&#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个Server可以包含至少一个Service&#xff0c;用于具体提供服务。Service主要包含两个部分&#xff1a;Connector和…...

游戏引擎学习第113天

仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板&#xff1a;优化的基本过程 在游戏编程中&#xff0c;优化是一个非常重要的学习内容&#xff0c;尤其是想要成为专业开发者时。优化的核心是理解代码的执行速度&#xff0c;以及如何提升其性能。在这个阶段&#xff0c;已经…...

【EB-02】TC397 Tresos 最小工程配置

TC397 Tresos 最小工程配置 1. 新建demo 工程2. 配置消除错误2.1 ResourceM 设置2.2 McalLib模块配置3. 生成代码3.1 校验工程3.2 生成代码1. 新建demo 工程 新建工程 设置工程名称 选择芯片型号 选择添加模块 得到最小工程需求模块 2. 配置消除错误 2.1 ResourceM 设置 设置芯…...

深入理解WebSocket接口:如何使用C++实现行情接口

在现代网络应用中&#xff0c;实时数据传输变得越来越重要。通过WebSocket&#xff0c;我们可以建立一个持久连接&#xff0c;让服务器和客户端之间进行双向通信。这种技术不仅可以提供更快的响应速度&#xff0c;还可以减少不必要的网络流量。本文将详细介绍如何使用C来实现We…...

前端面试题

以下是一些前端面试题: 一、HTML/CSS部分 如何实现一个元素的背景颜色渐变效果,并且在不同浏览器中保持兼容性? 答案: 对于现代浏览器,可以使用标准的CSS渐变语法。 线性渐变示例(从左到右,红色到蓝色):background: linear - gradient(to right, red, blue);径向渐变…...

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本&#xff0c;virtualbox对于这个5.x.xx版本早已停止维护&#xff0c;所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…...

Hyper-V初探

听说window自带虚拟机&#xff0c;小窃喜了一下&#xff0c;这样就不用下载第三方虚拟机软件了&#xff1a;VMware或者Oracle VirtualBox&#xff0c;但是本地搜索一看&#xff0c;发现没有安装&#xff0c;百度了一下说家庭中文版是个阉割版的系统&#xff0c;只有教育版&…...

IP协议

IP协议介绍 IP地址&#xff1d;目标网络&#xff0b;目标主机 IP协议是网络层协议 IP报头格式 [IP报头图片] IP报头解析 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4. 4 位头部长度(header length): IP 头部的长度是多少个 32bit, 也就是 length 4…...

Django Admin: 实现基于数据库实际值的动态过滤器

在 Django Admin 中,我们经常需要使用 list_filter 来为管理界面添加过滤功能。然而,有时我们希望过滤器能够动态地反映数据库中的实际值,而不是依赖于预定义的选项。本文将介绍如何实现一个基于数据库实际值的动态过滤器,以 ECR 仓库的区域过滤为例。 问题背景 在管理 E…...

overflow-x: auto 使用鼠标实现横向滚动,区分触摸板和鼠标滚动事件的方法

假设一个 div 的滚动只设置了 overflow-x: auto 我们发现使用鼠标的滚轮是无法左右滚动的&#xff0c;但是使用笔记本电脑的触摸板&#xff0c;或者在移动设备上是可以滚动的。所以我们需要兼容一下鼠标的横向滚动功能。 我们可以监控 wheel 事件&#xff0c;然后根据位置来计…...

DPVS-2:单臂负载均衡测试

上一篇编译安装了DPVS&#xff0c;这一篇开启DPVS的负载均衡测试 &#xff1a; 单臂 FULL NAT模式 拓扑-单臂 单臂模式 DPVS 单独物理机 CLINET&#xff0c;和两个RS都是另一个物理机的虚拟机&#xff0c;它们网卡都绑定在一个桥上br0 &#xff0c; 二层互通。 启动DPVS …...

宇树科技13家核心零部件供应商梳理!

2025年2月6日&#xff0c;摩根士丹利&#xff08;Morgan Stanley&#xff09;发布最新人形机器人研报&#xff1a;Humanoid 100: Mapping the Humanoid Robot Value Chain&#xff08;人形机器人100&#xff1a;全球人形机器人产业链梳理&#xff09;。 Humanoid 100清单清单中…...

sqli-labs之Kali搭建靶场环境

背景&#xff1a; SQL注入是一种常见的Web安全漏洞&#xff0c;攻击者可以通过该漏洞在应用程序中执行任意的SQL命令。为了帮助开发者和安全研究人员更好地理解和防范SQL注入攻击&#xff0c;sqli-labs应运而生。它是一个开源项目&#xff0c;提供了一系列的SQL注入练习环境&a…...

Kafka在Windows系统使用delete命令删除Topic时出现的问题

在使用Windows的Kafka时&#xff0c;想要删除某一个主题&#xff0c;发现使用了delete之后会一直报警告。下面是我发现错误之后重新实测的Bug 先创建2个topic kafka-topics.bat --bootstrap-server localhost:9092 --topic test1 --createkafka-topics.bat --bootstrap-serve…...

JVM 面试题相关总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

动态记忆网络 DeepMind的MEMO架构允许在推理时动态读写记忆矩阵,记忆容量提升40倍

为了更深入地理解 MEMO 架构的意义&#xff0c;我来详细解读一下&#xff0c;并探讨它在实际应用中的潜力&#xff1a; MEMO 架构的核心思想 MEMO (Memorizing over Memorized) 架构的核心思想是 “层叠记忆”。 传统的记忆网络通常只有一个外部记忆模块&#xff0c;而 MEMO …...

go 并发 gorouting chan channel select Mutex sync.One

goroutine // head&#xff1a; 前缀 index&#xff1a;是一个int的指针 func print(head string, index *int) {for i : 0; i < 5; i {// 指针对应的int *indexfmt.Println(*index, head, i)// 暂停1stime.Sleep(1 * time.Second)} }/* Go 允许使用 go 语句开启一个新的运…...

【STM32 基于PID的闭环电机控制系统】

STM32 基于PID的闭环电机控制系统 目录 STM32 基于PID的闭环电机控制系统一、PID算法在STM32F103C8T6中的实现思路二、代码实现与解释三、PID算法的调试与优化四、总结 一、PID算法在STM32F103C8T6中的实现思路 基本概念 • 目标 &#xff1a;通过PID算法调节电机的转速&#…...

Linux命令后双减号符(--)的含义

个人博客地址&#xff1a;Linux命令后双减号符&#xff08;--&#xff09;的含义 | 一张假钞的真实世界 Unix/Linux下各种命令的参数&#xff0c;都是以减号符&#xff08;-&#xff09;后面跟单字符参数&#xff0c;比如-r&#xff09;或者双减号符&#xff08;--&#xff09…...

QT闲记-工具栏

工具栏通常用来放置常用的操作按钮,如QPushButton,QAction等。可以放置在顶部,底部,左侧,右侧,并且支持拖曳,浮动。 1、创建工具栏 通常通过QMainWindow 提供的addToolBar()来创建,它跟菜单栏一样,如果需要工具栏,一般情况下,我们设置这个类的基类为QMainWindow。 …...

Linux中ps -ef命令详解

ps -ef 是一个常用的 Unix/Linux 命令&#xff0c;用于显示当前系统中所有进程的详细信息。具体来说&#xff0c;ps 是 "process status" 的缩写&#xff0c;用于查看进程的状态。-ef 是 ps 命令的选项组合&#xff0c;用于指定输出的格式和内容。 选项解释&#xf…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter20-JavaScript API

二十、JavaScript API JavaScript API 随着 Web 浏览器能力的增加&#xff0c;其复杂性也在迅速增加。从很多方面看&#xff0c;现代 Web 浏览器已经成为构建于诸多规范之上、集不同 API 于一身的“瑞士军刀”。浏览器规范的生态在某种程度上是混乱而无序的。一些规范如 HTML5&…...

详解分布式ID实践

引言 分布式ID&#xff0c;所谓的分布式ID&#xff0c;就是针对整个系统而言&#xff0c;任何时刻获取一个ID&#xff0c;无论系统处于何种情况&#xff0c;该值不会与之前产生的值重复&#xff0c;之后获取分布式ID时&#xff0c;也不会再获取到与其相同的值&#xff0c;它是…...

Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复

一、日志管理 &#xff08;1&#xff09;基本介绍 日志文件是重要的系统信息文件&#xff0c;记录了如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件在安全方面&#xff0c;日志也至关重要&#xff0c;它能记录系统日常发生的各类事情&#xff0c;可用于检…...

uniapp中@input输入事件在修改值只有第一次有效的问题解决

在uniapp中使用输入框&#xff0c;要求输入不超过7个字&#xff0c;所以需要监听输入事件&#xff0c;当每次输入文字的时候&#xff0c;就把输入的值截断&#xff0c;取前7个值。但是在input事件中&#xff0c;重新赋值的值发生了变化&#xff0c;但是页面上的还是没有变&…...

单片机 code RO-data RW-data ZI-data以及OTA学习

带着问题去学习&#xff1a;这些数据是什么&#xff1f;分别放在哪里&#xff0c; 是什么&#xff1a;我个人的理解 code 和RO-data 分别是代码和只读数据&#xff0c;RW-data以及ZI-data分别是读写数据和初始化数据。 codeRO-data的大小正好是所占用ROM的大小&#xff0c;RO…...

Jenkins 视图(View)

Jenkins 视图(View) 一、视图是什么 Jenkins 视图(View) 如下图中 All、Apps 都是 Jenkisn 中的 View 左侧如果有 New View 或者 点击 All 这一行最右侧的 号&#xff0c;都可以创建视图 二、视图(View)的作用 点击最左侧的 All 可以看到所有的任务 随着项目不断发展&am…...

【Deepseek+Dify】wsl2+docker+Deepseek+Dify部署本地大模型知识库问题总结

wsl2dockerDeepseekDify部署本地大模型知识库问题总结 基于ollama部署本地文本模型和嵌入模型 部署教程 DeepSeekdify 本地知识库&#xff1a;真的太香了 问题贴&#xff1a;启动wsl中docker中的dify相关的容器 发现postgre服务和daemon服务一直在重启&#xff0c;导致前端加…...

实战解析传统发电站智能化改造-第二期(带图带教程)

传统发电站的智能化改造&#xff0c;如同为老工匠配备高科技工具&#xff0c;提升效率与精准度。改造后的发电站兼具传统与智能&#xff0c;更高效、环保&#xff0c;适应现代能源需求。智慧系统搭建平台是连接感知层和应用层的桥梁&#xff0c;将原始数据转化为有价值的信息&a…...

鸿蒙5.0实战案例:基于自定义注解和代码生成实现路由框架

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…...

项目设置内网 IP 访问实现方案

在我们平常的开发工作中&#xff0c;项目开发、测试完成后进行部署上线。比如电商网站、新闻网站、社交网站等&#xff0c;通常对访问不会进行限制。但是像企业内部网站、内部管理系统等&#xff0c;这种系统一般都需要限制访问&#xff0c;比如内网才能访问等。那么一个网站应…...

单片机 Bootloade与二进制文件的生成

单片机的 Bootloader 是一种特殊的程序&#xff0c;负责在单片机上电后初始化硬件、更新用户应用程序&#xff08;固件&#xff09;&#xff0c;并将控制权移交给用户程序。以下是其运行机制和关键流程的详细说明&#xff1a; 1、单片机 Bootloader 的核心作用 固件更新&…...

open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

项目地址&#xff1a;GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上&#xff0c;请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…...

深度学习每周学习总结Y1(Yolov5 调用官方权重进行检测 )

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客Y1中的内容 &#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 ** 注意该训练营出现故意不退押金&#xff0c;恶意揣测偷懒用假的结果冒充真实打卡记录&#xff0c;在提出能够拿到视频录像…...

HTML项目一键打包工具:HTML2EXE 最新版

HTML2EXE 工具可以一键打包生成EXE可执行文件。可以打包任意HTML项目或者是一个网址为单个EXE文件&#xff0c;直接打开即可运行。支持KRPano全景VR项目、WebGL游戏项目、视频播放、,课件打包、网址打包等。 一、功能特点 类别序号功能标题1支持程序图标自定义&#xff08;支持…...

网络工程师 (43)IP数据报

前言 IP数据报是互联网传输控制协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;的数据报格式&#xff0c;由首部和数据两部分组成。 一、首部 IP数据报的首部是控制部分&#xff0c;包含了数据报传输和处理所需的各种信息。首部可以分为固定部分和可变部分。 固定…...

springboot-自定义注解

1.注解的概念 注解是一种能被添加到java代码中的【元数据&#xff0c;类、方法、变量、参数和包】都可以用注解来修饰。用来定义一个类、属性或一些方法&#xff0c;以便程序能被捕译处理。 相当于一个说明文件&#xff0c;告诉应用程序某个被注解的类或属性是什么&#xff0c…...

Pytorch实现之特征损失与残差结构稳定GAN训练,并训练自己的数据集

简介 简介:生成器和鉴别器分别采用了4个新颖设计的残差结构实现,同时在损失中结合了鉴别器层的特征损失来提高模型性能。 论文题目:Image Generation by Residual Block Based Generative Adversarial Networks(基于残留块的生成对抗网络产生图像) 会议:2022 IEEE Int…...

微信小程序模仿快播标签云滚动特效

说到快播&#xff0c;故事肯定就不少。用过的人都知道快播首页有个标签云的特效效果&#xff0c;就是渐隐渐显外加上下滚动&#xff0c;其实还挺好看的。至于其他故事嘛&#xff0c;因为没有酒&#xff0c;所以&#xff0c;还是来说说代码吧~ 一开始不是做这个特效需求&#xf…...

XUnity.AutoTranslator-deepseek——调用腾讯的DeepSeek V3 API,实现Unity游戏中日文文本的自动翻译

XUnity.AutoTranslator-deepseek 本项目通过调用腾讯的DeepSeek V3 API&#xff0c;实现Unity游戏中日文文本的自动翻译。 准备工作 1. 获取API密钥 访问腾讯云API控制台申请DeepSeek的API密钥&#xff08;限时免费&#xff09;。也可以使用其他平台提供的DeepSeek API。 …...

对比机器学习揭示了跨物种共享与特异性的脑功能结构|文献速递-医学影像人工智能进展

Title 题目 Contrastive machine learning reveals species -shared and -specific brainfunctional architecture 对比机器学习揭示了跨物种共享与特异性的脑功能结构 01 文献速递介绍 猕猴作为人类的动物模型&#xff0c;广泛用于研究大脑和行为的关键方面&#xff08;G…...

Vue 和 React 响应式的区别

React 和 Vue 在响应式机制上的核心区别主要体现在数据变化侦测方式、更新触发逻辑和设计理念上&#xff0c;具体如下&#xff1a; 一、数据变化侦测方式 Vue 的响应式 原理&#xff1a;通过 Proxy&#xff08;Vue3&#xff09;或 Object.defineProperty&#xff08;Vue2&#…...

MySQL主从架构

MySQL主从架构 MySQL REPLICATION 在实际生产环境中&#xff0c;如果对数据库的读和写都在一个数据库服务器中操作。无论是在安全性、高可用性&#xff0c;还是高并发等各个方面都是完全不能满足实际需求的&#xff0c;因此&#xff0c;一般来说都是通过主从复制&#xff08;…...

基于ros2与gazebo的导航仿真案例

文章目录 前言操作1、创建docker容器2、安装ROS23、Gazebo安装4、Nav2安装5、测试 前言 导航的入门小案例 参考&#xff1a; Ubuntu24.04 ROS2 Jazzy Gazebo Harmonic安装教程Docs / Gazebo Harmonic 注意选择版本 ROS 2 documentation 操作 1、创建docker容器 sudo docke…...

《Python实战进阶》专栏 No.3:Django 项目结构解析与入门DEMO

《Python实战进阶》专栏 第3集&#xff1a;Django 项目结构解析与入门DEMO 在本集中&#xff0c;我们将深入探讨 Django 的项目结构&#xff0c;并实际配置并运行一个入门DEMO博客网站&#xff0c;帮助你在 Web 开发中更高效地使用 Django。Django 是一个功能强大的 Python Web…...

基于WebGIS技术的校园地图导航系统架构与核心功能设计

本文专为IT技术人员、地理信息系统&#xff08;GIS&#xff09;开发者、智慧校园解决方案架构师及相关领域的专业人士撰写。本文提出了一套基于WebGIS技术的校园地图导航系统构建与优化方案&#xff0c;旨在为用户提供高效、智能、个性化的导航体验。如需获取校园地图导航系统技…...

开源且免费的CMS系统有哪几个可以放心用?

既开源又免费的两全其美的CMS不多见&#xff0c;不过总会存在一些个例&#xff0c;给用户们带来更具有建设性的选择&#xff0c;以下是一些开源免费且值得信赖的CMS系统&#xff0c;可以根据你的需求选择合适的平台&#xff1a; 1、WordPress ▷ 特点&#xff1a;全球最流行的…...