Python 网络爬虫进阶:突破数据采集的边界
在成功踏入 Python 网络爬虫的入门之境后,我们犹如初窥宝藏的探险家,领略到了数据采集世界的奇妙与潜力。而此刻,进阶之路在脚下徐徐展开,它将引领我们深入这片领域的更深处,挖掘出更为强大和精妙的爬虫技艺,去征服那些更为复杂和富有挑战性的数据高峰。
一、动态网页爬取
在网络的浩瀚海洋中,动态网页如灵动的精灵,其内容并非静态地呈现在 HTML 源代码之中,而是通过 JavaScript 等脚本语言在页面加载后动态生成。这对于传统的基于静态页面解析的爬虫而言,无疑是一道坚固的壁垒。然而,Python 为我们提供了有力的武器 ——Selenium 库。
Selenium 允许我们控制真实的浏览器,模拟用户的各种操作,如点击按钮、滚动页面、填写表单等。例如,当我们面对一个使用 AJAX 技术加载更多数据的网页时,我们可以使用 Selenium 启动浏览器,导航到目标页面,然后等待页面元素加载完成,再提取我们所需的数据。以下是一个简单的示例代码,用于模拟在一个动态网页中点击按钮并获取更新后的内容:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 打开目标网页
driver.get('https://www.example.com/dynamic_page')# 等待按钮可点击
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_more_button'))
)# 点击按钮
button.click()# 等待更新后的内容加载完成
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'new_data'))
)# 获取页面源代码并提取数据
html = driver.page_source
# 使用 BeautifulSoup 或其他解析库解析页面并提取数据
#...# 关闭浏览器
driver.quit()
通过 Selenium,我们能够轻松地与动态网页进行交互,捕捉到那些隐藏在动态加载背后的珍贵数据,让动态网页不再是爬虫的禁区。
二、数据的高效存储与管理
随着爬取数据量的不断增大,如何高效地存储和管理数据成为了关键。除了传统的文本文件存储方式,数据库的运用能够为我们带来更强大的数据组织和查询能力。
(一)关系型数据库 MySQL
MySQL 是一款广泛应用的关系型数据库管理系统。在 Python 中,我们可以使用 PyMySQL 库来连接和操作 MySQL 数据库。例如,我们可以创建数据库表来存储爬取到的数据,如下所示:
import pymysql# 连接数据库
conn = pymysql.connect(host='localhost',user='root',password='your_password',database='your_database'
)# 创建游标
cursor = conn.cursor()# 创建表
create_table_sql = """
CREATE TABLE IF NOT EXISTS your_table (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255),content TEXT,url VARCHAR(255)
)
"""
cursor.execute(create_table_sql)# 插入数据
insert_sql = "INSERT INTO your_table (title, content, url) VALUES (%s, %s, %s)"
data = ('Example Title', 'Example Content', 'https://www.example.com')
cursor.execute(insert_sql, data)# 提交事务
conn.commit()# 关闭游标和连接
cursor.close()
conn.close()
通过将数据存储到 MySQL 数据库中,我们可以利用 SQL 语句进行复杂的数据查询、筛选和统计分析,使数据的价值得到更充分的挖掘。
(二)非关系型数据库 MongoDB
对于那些具有复杂结构或需要高度灵活性的数据,非关系型数据库 MongoDB 是一个绝佳的选择。Python 的 PyMongo 库为我们提供了与 MongoDB 交互的便捷方式。以下是一个简单的示例,展示如何将数据插入到 MongoDB 集合中:
from pymongo import MongoClient# 连接 MongoDB 服务器
client = MongoClient('mongodb://localhost:27017/')# 选择数据库和集合
db = client['your_database']
collection = db['your_collection']# 插入数据
data = {'title': 'Example Title','content': 'Example Content','url': 'https://www.example.com'
}
collection.insert_one(data)# 关闭连接
client.close()
MongoDB 以其灵活的文档型数据模型,能够轻松应对各种不规则的数据结构,为大规模数据的存储和处理提供了高效的解决方案。
三、反爬虫机制应对策略
在我们于网络世界中肆意驰骋,采集数据的过程中,网站的反爬虫机制如影随形,时刻警惕着我们的一举一动。为了确保我们的爬虫能够持续稳定地运行,我们必须掌握有效的应对策略。
(一)设置合理的请求头
网站常常通过检查请求头中的信息来识别爬虫。我们可以通过设置合理的请求头,模拟真实用户的浏览器请求。例如:
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;q=0.9','Accept-Language': 'en-US,en;q=0.9'
}response = requests.get('https://www.example.com', headers=headers)
通过设置与真实浏览器相似的 User-Agent、Accept 等请求头信息,我们能够在一定程度上迷惑网站,降低被识别为爬虫的风险。
(二)使用代理 IP
当我们的爬虫频繁地从同一个 IP 地址向目标网站发送请求时,很容易被网站封禁。使用代理 IP 可以有效地解决这一问题。我们可以从一些免费或付费的代理 IP 提供商那里获取代理 IP 列表,然后在请求时随机切换代理 IP。例如:
import requests# 代理 IP 列表
proxy_list = [{'http': 'http://proxy1.example.com:8080'},{'http': 'http://proxy2.example.com:8080'},#...
]# 随机选择一个代理 IP
proxy = random.choice(proxy_list)response = requests.get('https://www.example.com', proxies=proxy)
这样,即使某个代理 IP 被封禁,我们仍然可以通过切换其他代理 IP 继续进行数据采集工作。
(三)验证码处理
有些网站为了防止爬虫,会设置验证码验证环节。对于简单的验证码,如数字验证码或字母验证码,我们可以使用一些图像识别库,如 Tesseract OCR 来识别。例如:
import pytesseract
from PIL import Image# 打开验证码图片
image = Image.open('captcha.png')# 使用 Tesseract OCR 识别验证码
captcha_text = pytesseract.image_to_string(image)# 将识别出的验证码填入表单并提交请求
#...
然而,对于一些复杂的验证码,如滑动验证码、点选验证码等,可能需要借助一些专门的验证码识别服务或采用模拟人类操作的方式,如使用 Selenium 模拟鼠标滑动或点击操作来通过验证码验证。
四、分布式爬虫架构
当我们面临大规模数据采集任务,单个爬虫的效率已无法满足需求时,分布式爬虫架构便应运而生。它通过将爬虫任务分配到多个节点上同时进行,大大提高了数据采集的速度和效率。
在 Python 中,我们可以使用 Scrapy 框架结合 Redis 来构建分布式爬虫。Scrapy 是一个强大的 Python 爬虫框架,而 Redis 则作为分布式任务队列,用于存储待爬取的 URL 列表和协调各个节点之间的工作。
首先,我们需要在 Scrapy 项目中配置 Redis 连接信息:
# 在 settings.py 文件中
REDIS_URL ='redis://localhost:6379'
然后,我们可以创建一个自定义的 Spider 类,继承自 Scrapy 的 Spider 类,并在其中实现分布式爬虫的逻辑。例如:
import scrapy
from scrapy_redis.spiders import RedisSpiderclass MySpider(RedisSpider):name ='myspider'redis_key ='myspider:start_urls'def parse(self, response):# 解析页面并提取数据#...# 提取页面中的链接并将其添加到 Redis 队列中links = response.css('a::attr(href)').getall()for link in links:self.server.lpush(self.redis_key, link)
在启动分布式爬虫时,我们可以先在 Redis 中添加初始的 URL 列表,然后启动多个 Scrapy 节点,这些节点将从 Redis 队列中获取 URL 并进行爬取,实现了分布式的数据采集。
Python 网络爬虫的进阶之路充满了挑战与机遇。通过掌握动态网页爬取技术、高效的数据存储与管理方法、反爬虫机制应对策略以及分布式爬虫架构,我们能够在数据采集的征程中披荆斩棘,获取更为丰富和有价值的数据资源。然而,我们也要时刻牢记遵守法律法规和道德规范,以合法、合规、合理的方式运用我们所掌握的爬虫技术,让其成为我们探索数据世界的得力助手,而非破坏网络生态的利器。在不断的学习和实践中,让我们的爬虫技艺日益精湛,在数据的浩瀚星空中留下属于自己的璀璨轨迹。
相关文章:
Python 网络爬虫进阶:突破数据采集的边界
在成功踏入 Python 网络爬虫的入门之境后,我们犹如初窥宝藏的探险家,领略到了数据采集世界的奇妙与潜力。而此刻,进阶之路在脚下徐徐展开,它将引领我们深入这片领域的更深处,挖掘出更为强大和精妙的爬虫技艺࿰…...
【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义
文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代,安全问题已成为技术领域不可忽视的…...
[论文解读]Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting
Street Gaussians是年初的一篇动态场景重建论文, 在当时是做到了SOTA,至今为止很多自动驾驶或者动态场景重建的文章都会将Street Gaussians作为实验的比较对象,这也表明了这篇文章的重要性,今天就一起来看看这篇文章; …...
在Github上上传大文件的办法(图文版)
在上一篇笔记中,笔者用图文的形式介绍了如何在GITHUB中上传文件夹。 可参考这篇笔记 在GITHUB上传本地文件指南(详细图文版)-CSDN博客 但接下来,笔者在继续上传别的文件的过程中,遇到了新的问题,gitbash…...
关于springBoot+vue项目中配置SSL证书问题
前端可以通过https进行访问 1.前端在访问后端接口时,使用https进行访问,在request.js配置文件中,这个文件是配置axios的基本请求的,在基础请求地址中改为https方式 2.需要在Linux中的nginx中配置ssl证书,具体请参考&…...
GitLab
Git服务器 一、概念 C/S 架构的 Git 服务端是存放代码的公用平台是多人并行协作的核心部分通常单独部署在一台独立的服务器上客户端可以通过网络访问服务器上的仓库 GitLab搭建 一、部署 1、安装依赖包 [rootGitLab ~]# yum -y install policycoreutils-python-utils.noarc…...
TCP客户端服务器端通信(线程池版)
1、什么是监听套接字,和UDP相比,TCP为什么文件描述符变多了? 在网络编程中,TCP和UDP是两种常见的传输协议,它们之间最大的不同之一在于连接的管理方式。为了更好地理解这个区别,我们可以用一个生动的比喻来…...
go语言的成神之路-标准库篇-fmt标准库
目录 一、三种类型的输出 print: println: printf: 总结: 代码展示: 二、格式化占位符 %s:用于格式化字符串。 %d:用于格式化整数。 %f:用于格式化浮点数。 %v࿱…...
高级java每日一道面试题-2024年12月08日-JVM篇-什么是类加载器?
如果有遗漏,评论区告诉我进行补充 面试官: 什么是类加载器? 我回答: 在Java高级面试中,类加载器(ClassLoader)是一个重要的概念,它涉及到Java类的加载和初始化机制。以下是对类加载器的详细解释: 定义与作用 类加…...
数据库之连接池Druid
Druid是一个由阿里巴巴开源的高性能数据库连接池组件,它在许多项目中都是首选的连接池实现。Druid不仅提供了高效的连接管理,还具备丰富的监控和统计功能,以及强大的安全特性。 一、功能介绍 1、高效连接管理 Druid采用了高效的连接管理机…...
【如何审稿】Notes on Constructive and Positive Reviewing
学习体会: 用chatgpt翻译的2005年审稿人如何审稿的一篇文章, 学着用审稿人的角度评审自己写的稿件~ 全文摘录: 作为审稿人,您代表的是您的社区,您的审稿意见应当是专业和建设性的。会议的质量取决于审稿的质量。审稿人的任务是选出高质量、创…...
1.文本方块方法(Spacy Text Splitter 方法)Can‘t find model ‘zh_core_web_sm‘
一、概述 执行如下: def split_spacy(text):import spacynlp spacy.load( "zh_core_web_sm" ) doc nlp(text) for s in doc.sents: print(s) # d:\programdata\anaconda3\envs\python310\lib\site-packages if __name__"__main__":text &q…...
IT类项目实施流程
一、项目启动准备阶段 (一)甲方组建项目委员会 **甲方委员会确立:**指定负责人,全权负责整个项目人员、启动及时间调配、需求确定及需求变更、项目节点的验收、项目款项的支付工作。 (二) 乙方组建项目实施工作组 **乙方实施工作组确立:**工作组主要包括项目经理、需…...
数据分析平台业务落地痛点分析
在当今数字化时代,数据已成为企业决策和运营的核心驱动力。数据分析平台作为数据处理和洞察的重要工具,其业务落地过程中的痛点分析对于企业的数据战略至关重要。本文将通过概述、功能点、背景、业务点、底层原理等多个方面,深入剖析数据分析…...
java语言学习(5)
第九章 目录 类变量和类方法 理解main方法语法 代码块 单列设计模式 final关键字 抽象类 接口 类变量/静态变量 该变量最大的特点就是会被本类的所有对象实例共享,类变量可以通过类名来访问 分析代码,探讨内存的分配 class Child{private Str…...
基于SSM框架点餐管理系统(计算机毕业设计)论文,Java
系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...
独家首发 | 基于 KAN、KAN卷积的轴承故障诊断模型
往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...
nginx-proxy-manager初次登录502 bad gateway
nginx-proxy-manager初次登录502 bad gateway 按照官方docker-compose安装后,页面如下: 默认账户密码: adminexample.com/changeme点击sign in,提示Bad Gateway 打开调试 重装后依然如此,最后查阅githup issue 找到答案 https://github.com/NginxProxyManager/nginx-proxy-…...
棋牌项目Go的日志打印问题
棋牌项目Go的日志打印问题 项目使用 go work 管理模块 github.com/spf13/viper 通过 application.yml 加载配置 $ tree . ├── README.md ├── common │ ├── application.yml │ ├── config │ │ └── config.go │ ├── go.mod │ ├── go.su…...
基于SpringBoot校园台球厅人员与设备管理系统设计与实现
1.1课题背景与意义 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管理的兴起…...
样品前处理工作站自动化操作
样品前处理工作站通过集成多种技术和自动化模块,实现了对样品的高效、精准处理。以下是实现自动化操作的关键步骤和原理: 1、集成多种技术:工作站通常集成了液体处理、固相萃取、离心、过滤等多种技术。这些技术的结合使得工作站能够完成从样…...
在 Vue 3 中实现点击按钮后禁止浏览器前进或后退
在 Vue 3 中实现点击按钮后禁止浏览器前进或后退,我们可以通过 ref 和 watch 来管理状态,同时使用 onBeforeUnmount 来清理事件监听。 使用 Vue 3 实现: <template><div><button click"disableNavigation">点击…...
【Redis集群】使用docker compose创建docker集群,并暴露外部接口
使用 Docker Compose 创建一个 Redis 集群并暴露外部接口需要配置 docker-compose.yml 文件。以下是一个基本的步骤,包括 Redis 集群的创建和外部接口的暴露。 1、创建 docker-compose.yml 首先,您需要创建一个 docker-compose.yml 文件,配…...
RabbitMq 基础
文章目录 一、初识 MQ1.1 同步调用:1.2 异步调用: 二、RabbitMQ三、SpringAMQP3.1 依赖和配置文件3.2 消息发送和接收:3.2.1 消息发送:3.2.2 消息接收: 3.3 WorkQueues 模型:3.4 交换机类型:3.4…...
类文件结构详解
一、引言 Java 类文件是 Java 虚拟机执行的基本单元。它包含了 Java 程序的字节码以及其他重要的元数据信息。了解类文件结构可以帮助我们更好地理解 Java 程序的编译过程、运行机制以及如何进行优化。 二、类文件结构概述 Java 类文件采用一种紧凑的二进制格式,主…...
01_Linux
一.Linux简介 1.1 Linux介绍 Linux是一套免费使用和自由传播的操作系统。说到操作系 统,大家比较熟知的应该就是Windows和MacOS操作系统, 我们今天所学习的Linux也是一款操作系统 1.2 Linux发展历史 时间:1991年 地点:芬兰赫尔…...
区块链与AI结合:驱动Web3的未来发展
Web3作为下一代互联网的核心理念,强调去中心化、用户主权和透明性。而区块链技术和人工智能(AI)则是推动Web3发展的两大关键力量。两者的结合不仅为Web3带来了新的可能性,还推动了智能化、透明化、自治化等特点的实现。本文将探讨…...
如何解决 docker 容器中 “-bash: ping: command not found” 错误 ?
在 Docker 的世界里,遇到错误是学习曲线的一部分,其中一个常见的错误是: -bash: ping: command not found。当您在 Docker 容器中尝试使用 ping 命令来测试与其他网络机器或服务的连接,但该命令在您的容器环境中不可用时ÿ…...
Leetcode 每日一题 242.有效的字母异位词
目录 问题描述 示例 题目要求 解决方案 算法思路 过题图片 代码实现 算法分析 优化思路 优化后的代码实现 优化后的算法分析 题目链接 问题描述 给定两个字符串 s 和 t,我们需要编写一个函数来判断 t 是否是 s 的字母异位词。字母异位词指的是两个字符串…...
centos7搭建FTP详细讲解
文章目录 1、ftp服务1、工作原理2、工作模式3、身份验证模式4、ftp服务器配置5、ftp客户端操作 1、ftp服务 1、工作原理  是一个cs架构 2个通道,21端口为控制…...
YOLOv8-ultralytics-8.2.103部分代码阅读笔记-build.py
build.py ultralytics\data\build.py 目录 build.py 1.所需的库和模块 2.class InfiniteDataLoader(dataloader.DataLoader): 3.class _RepeatSampler: 4.def seed_worker(worker_id): 5.def build_yolo_dataset(cfg, img_path, batch, data, mode"train"…...
JAVA-动态代理
文章目录 概要两种主要方式JDK 动态代理Proxy 类作用:常用方法: InvocationHandler 接口作用: 目标对象、代理对象、被代理对象JDK 动态代理工作原理 cjlib 动态代理demo 对比 概要 Java 动态代理利用 Java 的反射机制,可以在运行…...
【前端】React_Next.js
定期更新,建议关注、收藏! 安装 要使用react的框架,都应当安装node.js conda install nodejs选择Next.js 并创建项目 npx create-next-applatest可以看到目录结构生成如下 作为网页中的一个子路由 想让其嵌入已经写好的项目中…...
深入理解malloc与vector:内存管理的对比
引言 在编程中,内存管理是一个至关重要的环节。无论是C语言中的malloc函数,还是C标准库中的vector容器,它们都在内存分配和释放上扮演着关键角色。然而,它们的设计理念和用法有着显著的不同。本文将深入探讨malloc和vector的区…...
LeetCode题练习与总结:四数相加 Ⅱ --454
一、题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入:n…...
AI绘画设计实战-Day1
AI绘画变现方向: 生成猫咪拟人化;老照片修复;生成奇幻场景,换上客户的脸;生成商品详情模特图;商品宣传图;建筑/室内设计方案; AI视频-变现方向: AI跳舞视频ÿ…...
【Windows】ImmGetContext函数不适合跨进程工作
1. 教授回复 ChatGPT-o1: ImmGetContext() is not designed to work across process boundaries. It is indicates that a thread should not access the input context created by another thread, which implies that the function is intended for use within the same proc…...
【Linux】进程间通信——System V共享内存
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
fastAPI快速使用
1. 安装: pip install fastapi 并且安装uvicorn来作为服务器: pip install uvicorn 最简单的 FastAPI 文件可能像下面这样: # main.pyfrom fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message&qu…...
ruoyi前后端不分离创建module
ruoyi创建module 1.创建表 2.在若依中创建module 3.注意选择maven 4.命名 5.把module加入到rouyi的pom.xml中 6.student 中加入common依赖 二.生成代码 2.1先创建目录 2.2导入创建的表 2.3 注意各种配置 2.4预览代码 2.5 生成代码 2.6…...
【AI日记】24.12.08 kaggle 比赛 Titanic-11
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容: 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习(pandas,numpy,sklearn,seaborn,matplotlib&a…...
处理后端返回的时间格式问题
今天在做项目的时候,发现后端返回的时间格式是“2024-12-08T06:11:46.00000:00”。 通过查阅资料,我发现这是后端返回的ISO 8601标准时间格式。这种格式在前端展示时可能不符合用户习惯,需要转换为更常见的“yyyy-MM-dd HH:mm:ss”格式&…...
【读书笔记·VLSI电路设计方法解密】问题33:ASIC芯片构建的主要步骤是什么
如问题32所述,ASIC芯片构建的主要步骤包括:RTL编写、功能验证、逻辑综合、布局布线、最终逻辑验证、时序验证、物理验证以及流片(Tapeout)。 RTL编写(RTL Coding) 这一阶段将设计意图从自然语言(如英文或中文)翻译为计算机可模拟的语言,以便进行仿真验证设计意图。此外…...
[机器学习] 监督学习之线性回归与逻辑回归
这里写目录标题 一、监督学习概述二、线性回归(一)模型表示(二)损失函数(三)梯度下降算法导入所需库生成模拟数据(可替换为真实数据)初始化参数并进行训练可视化损失函数随迭代次数的…...
十五、全局搜索正则表达式
一.grep简介 grep 全程Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特 定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep和egrep 二.grep的工作…...
kali Linux 安装配置教程(图文详解)
目录 一、下载安装VMware二、下载kali镜像三、安装kali到虚拟机 一、下载安装VMware 点我查看 二、下载kali镜像 官网下载:https://www.kali.org/get-kali/#kali-platforms 演示下载的为下图左边的,实际我们直接下载右侧虚拟机的直接使用就行 右侧下…...
QT QTableWidget::setModel”: 无法访问 private成员
//严重性代码说明项目文件行禁止显示状态 //错误C2248 “QTableWidget::setModel”: 无法访问 private 成员(在“QTableWidget”类中声明) QSqlQueryModel* sql_model; ui.tableView_database->setModel(sql_model); //ok ui.tableWidget_database->setModel(sql_model)…...
C#怎么判断电脑是否联网
在 C# 中,可以通过几种方法检测计算机是否联网。以下是几种常用的方式: 1. 使用 System.Net.NetworkInformation.Ping 类 通过发送一个 Ping 请求到公共 DNS 服务器(如 Google 的 DNS 8.8.8.8)来检测是否联网。这是最常见的一种…...
丢垃圾视频时间检测 -- 基于状态机的实现
文章目录 OverviewKey PointsPseudo-code Overview 需要考虑的方面 状态定义和转换条件时序约束空间约束异常处理 状态机的设计需要考虑的场景: 没有人人进入人携带垃圾人离开但垃圾留下垃圾消失异常情况(检测失败、多人多垃圾等) Key P…...
EEG2Rep自监督脑电大模型文献阅读
原文网址: EEG2Rep: Enhancing Self-supervised EEG Representation... - Google 学术搜索https://scholar.google.com/scholar?hlzh-CN&as_sdt0%2C5&qEEG2Rep%3AEnhancingSelf-supervisedEEGRepresentationThroughInformativeMaskedInputs&btnG 1.文…...