Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)
Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)
文章目录
- Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)
- 前言:数据时代的爬虫使命
- 第一章:Python爬虫基础入门
- 本章导读
- 1.1 Python环境配置
- 代码实现与解读
- 1.2 HTTP协议核心概念
- 代码实现与解读
- 1.3 第一个爬虫程序
- 代码实现与解读
- 1.4 数据存储:从内存到持久化
- 代码实现与解读
- 第二章:Python爬虫基础入门(深度解读)
- 2.1 Python环境配置
- 代码块解析
- 2.2 HTTP协议核心概念
- 代码块解析
- 2.3 第一个爬虫程序
- 代码块解析
- 第三章:爬虫核心技术解析(深度扩展)
- 3.1 请求库:Requests与aiohttp
- 异步爬虫原理
- 3.2 解析库:BeautifulSoup与lxml
- XPath高级用法
- 3.3 数据存储:CSV/MySQL/MongoDB
- MongoDB批量插入优化
- 第四章:高级反爬策略与突破技巧(新增内容)
- 4.1 验证码识别方案
- 使用Tesseract-OCR识别简单验证码
- 4.2 浏览器指纹伪装
- 使用fake_useragent随机User-Agent
- 第五章:分布式爬虫架构设计(新增内容)
- 5.1 Scrapy-Redis架构
- 搭建分布式爬虫集群
- 5.2 基于Celery的异步任务调度
- 定义爬虫任务队列
- 第六章:法律合规与伦理实践(深度扩展)
- 6.1 数据隐私保护
- GDPR合规处理
- 结语:爬虫技术的未来趋势
前言:数据时代的爬虫使命
在当今信息爆炸的时代,数据已成为驱动商业决策、科学研究和社会发展的核心资源。无论是电商平台的用户评论、社交媒体上的实时动态,还是金融市场的交易数据,这些信息背后都蕴藏着巨大的价值。然而,如何高效、精准地获取这些数据,并将其转化为可用的知识,成为开发者面临的重要挑战。
Python,凭借其简洁的语法、丰富的第三方库(如Requests、BeautifulSoup、Scrapy)以及活跃的开发者社区,已成为网络爬虫开发的首选语言。无论是数据科学家、业务分析师,还是软件工程师,掌握Python爬虫技术都能为其打开一扇通往数据世界的大门。
本指南旨在通过系统化的知识体系与实战案例,帮助读者从零基础逐步进阶为爬虫技术专家。文中不仅涵盖基础的环境搭建、HTTP协议解析、数据提取与存储,更深入探讨反爬策略突破、分布式架构设计、法律合规等高级主题。无论您是希望快速入门的初学者,还是寻求技术深化的资深开发者,本书都将为您提供切实可行的解决方案。
第一章:Python爬虫基础入门
本章导读
本章将带领读者迈出爬虫开发的第一步,从环境配置到核心概念解析,逐步构建完整的知识框架。通过本章的学习,您将掌握以下核心技能:
- 独立搭建Python开发环境,隔离项目依赖。
- 理解HTTP协议的核心机制,包括请求方法、状态码与头部字段。
- 编写第一个爬虫程序,实现网页数据的抓取与解析。
- 熟悉常用工具库(如Requests、BeautifulSoup),为后续复杂场景打下基础。
1.1 Python环境配置
代码实现与解读
# 使用venv创建虚拟环境(Windows)
python -m venv myenv
myenv\Scripts\activate# 安装核心库
pip install requests beautifulsoup4 pandas
逐行解析:
- 创建虚拟环境:
python -m venv myenv
:调用Python内置的venv
模块,在当前目录下创建名为myenv
的虚拟环境。- 为何需要虚拟环境?避免全局Python环境的依赖冲突。例如,项目A依赖库X的1.0版本,而项目B依赖库X的2.0版本,虚拟环境可分别管理两者的依赖。
- 激活虚拟环境:
- Windows系统执行
myenv\Scripts\activate
,Linux/macOS使用source myenv/bin/activate
。 - 激活后的变化:命令行提示符会显示
(myenv)
前缀,后续所有操作(如pip install
)仅影响当前环境。
- Windows系统执行
- 安装核心库:
requests
:发送HTTP请求的核心库,支持GET/POST方法、会话保持(Cookies)、超时设置等功能。beautifulsoup4
:HTML/XML解析库,支持CSS选择器和多种解析器(如html.parser
、lxml
)。pandas
:数据清洗与分析工具,可将爬取结果转换为结构化数据(DataFrame),并导出为CSV或Excel文件。
扩展知识点:
- 依赖管理:通过
pip freeze > requirements.txt
生成依赖清单,其他开发者可通过pip install -r requirements.txt
一键安装。 - 多环境管理工具:对于复杂项目,可使用
conda
或poetry
管理多版本Python和依赖关系。
1.2 HTTP协议核心概念
代码实现与解读
import requestsresponse = requests.get('https://api.example.com/data')
print(f"状态码: {response.status_code}") # 200表示成功
print(f"响应头: {response.headers['Content-Type']}") # 数据类型
print(f"Cookies: {response.cookies}") # 会话保持
逐行解析:
-
发送GET请求:
requests.get(url)
向目标URL发送HTTP GET请求,返回一个Response
对象。- 关键属性:
status_code
:HTTP状态码(如200表示成功,404表示资源未找到,503表示服务不可用)。headers
:包含服务器返回的响应头信息,例如Content-Type
指示响应体格式(如text/html
或application/json
)。
-
会话管理:
-
Cookies
用于在多次请求间保持会话状态。例如,用户登录后服务器返回的Cookie需在后续请求中携带,以维持登录状态。 -
进阶用法:使用
requests.Session()
对象自动管理Cookies,提升效率。session = requests.Session() session.get('https://example.com/login', params={'user': 'admin', 'pass': '123'}) session.get('https://example.com/dashboard') # 自动携带登录后的Cookie
-
扩展知识点:
-
定制请求头:通过
headers
参数模拟浏览器行为,避免被识别为爬虫。headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36','Referer': 'https://www.google.com/' } response = requests.get(url, headers=headers)
-
HTTPS安全机制:设置
verify=True
(默认)验证SSL证书,生产环境中切勿禁用(verify=False
)以避免中间人攻击。 -
超时与重试:通过
timeout
参数控制请求超时时间,结合retrying
库实现自动重试。from retrying import retry@retry(stop_max_attempt_number=3, wait_fixed=2000) def safe_request(url):return requests.get(url, timeout=5)
1.3 第一个爬虫程序
代码实现与解读
import requests
from bs4 import BeautifulSoupurl = 'https://books.toscrape.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')books = []
for book in soup.select('article.product_pod'):title = book.h3.a['title']price = book.select_one('p.price_color').textbooks.append({'title': title, 'price': price})print(f"抓取到{len(books)}本书籍")
逐行解析:
- HTML解析流程:
BeautifulSoup(response.text, 'html.parser')
将原始HTML文本转换为可遍历的DOM树结构。- 解析器选择:
html.parser
为Python内置解析器,无需额外安装;lxml
解析速度更快,但需通过pip install lxml
安装。
- 元素定位与提取:
soup.select('article.product_pod')
使用CSS选择器定位所有书籍条目。- 选择器语法:
article.product_pod
表示选择所有class
包含product_pod
的<article>
元素。
- 选择器语法:
book.h3.a['title']
通过属性链式访问获取书名,等效于book.find('h3').find('a')['title']
。select_one('p.price_color')
定位单个价格元素,text
属性获取其文本内容。
扩展知识点:
-
XPath与CSS选择器对比:
- CSS选择器:语法简洁,适合简单层级结构(如
div.content > ul > li
)。 - XPath:支持复杂路径和函数(如
//div[contains(@class, "price")]/text()
),灵活性更高。
- CSS选择器:语法简洁,适合简单层级结构(如
-
动态内容处理:若页面数据通过JavaScript加载(如无限滚动、懒加载),需使用Selenium或Playwright模拟浏览器行为。
from selenium import webdriverdriver = webdriver.Chrome() driver.get('https://dynamic-site.com') driver.find_element_by_css_selector('button.load-more').click() html = driver.page_source
1.4 数据存储:从内存到持久化
代码实现与解读
import pandas as pd# 将数据转换为DataFrame
df = pd.DataFrame(books)# 导出为CSV文件
df.to_csv('books.csv', index=False)# 导出为Excel文件
df.to_excel('books.xlsx', engine='openpyxl')
逐行解析:
- 数据结构转换:
pd.DataFrame(books)
将字典列表转换为结构化DataFrame,便于后续分析与导出。- DataFrame优势:支持列操作(如排序、过滤)、数据统计(如均值、标准差)及可视化。
- 持久化存储:
to_csv('books.csv')
将数据保存为CSV文件,适用于小型数据集或快速导出。to_excel('books.xlsx')
生成Excel文件,需安装openpyxl
库(通过pip install openpyxl
)。
扩展知识点:
-
数据库集成:使用
sqlalchemy
库将数据写入MySQL或PostgreSQL。from sqlalchemy import create_engineengine = create_engine('mysql://user:password@localhost/db_name') df.to_sql('books', engine, if_exists='append', index=False)
-
JSON格式存储:适用于嵌套数据结构(如评论及其子评论)。
import jsonwith open('books.json', 'w', encoding='utf-8') as f:json.dump(books, f, ensure_ascii=False, indent=2)
第二章:Python爬虫基础入门(深度解读)
2.1 Python环境配置
代码块解析
# 使用venv创建虚拟环境(Windows)
python -m venv myenv
myenv\Scripts\activate# 安装核心库
pip install requests beautifulsoup4 pandas
代码解读:
- 虚拟环境创建:
python -m venv myenv
调用Python内置的venv
模块创建名为myenv
的虚拟环境目录。- 虚拟环境隔离项目依赖,避免不同项目的库版本冲突。例如,一个项目可能需要
requests 2.25.1
,另一个项目可能需要requests 2.28.0
,虚拟环境可分别管理。
- 激活虚拟环境:
- Windows系统通过
myenv\Scripts\activate
激活环境,Linux/macOS使用source myenv/bin/activate
。 - 激活后命令行提示符会显示环境名称,表示后续操作仅影响当前环境。
- Windows系统通过
- 核心库安装:
requests
:用于发送HTTP请求,支持GET/POST等方法,处理Cookies和Session。beautifulsoup4
:HTML/XML解析库,支持多种解析器(如lxml
)。pandas
:数据清洗与分析工具,可将爬取结果转为DataFrame并导出为CSV或Excel。
扩展知识点:
- 依赖管理:使用
pip freeze > requirements.txt
导出依赖列表,便于团队协作。 - 多版本Python管理:通过
pyenv
工具(Linux/macOS)或conda
实现多版本Python切换。
2.2 HTTP协议核心概念
代码块解析
import requestsresponse = requests.get('https://api.example.com/data')
print(f"状态码: {response.status_code}") # 200表示成功
print(f"响应头: {response.headers['Content-Type']}") # 数据类型
print(f"Cookies: {response.cookies}") # 会话保持
代码解读:
- HTTP请求流程:
requests.get()
发送GET请求,返回Response
对象。status_code
属性获取HTTP状态码(如200表示成功,404表示资源未找到)。headers
属性包含服务器返回的HTTP头信息,例如Content-Type
指示响应体格式(如text/html
或application/json
)。
- 会话管理:
Cookies
用于维护用户会话。例如,登录后服务器返回的Cookie需在后续请求中携带以保持登录状态。- 使用
requests.Session()
对象可自动管理Cookies,提升效率。
扩展知识点:
- 请求头定制:通过
headers
参数模拟浏览器行为,例如添加User-Agent
和Referer
。 - HTTPS证书验证:设置
verify=False
可跳过SSL证书验证(生产环境不推荐)。 - 超时控制:
requests.get(url, timeout=5)
设置超时时间,避免长时间阻塞。
2.3 第一个爬虫程序
代码块解析
import requests
from bs4 import BeautifulSoupurl = 'https://books.toscrape.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')books = []
for book in soup.select('article.product_pod'):title = book.h3.a['title']price = book.select_one('p.price_color').textbooks.append({'title': title, 'price': price})print(f"抓取到{len(books)}本书籍")
代码解读:
- HTML解析流程:
BeautifulSoup(response.text, 'html.parser')
将HTML文本转为可遍历的树形结构。html.parser
是Python内置解析器,速度较慢但无需额外安装;可替换为lxml
提升性能。
- 元素定位技巧:
soup.select('article.product_pod')
使用CSS选择器定位所有书籍条目。select_one()
用于获取单个元素,book.h3.a['title']
通过属性链式访问书名。
扩展知识点:
- XPath与CSS选择器对比:
- CSS选择器语法简洁,适合简单层级结构。
- XPath支持更复杂的路径表达式(如
//div[@class="price"]/text()
)。
- 动态内容处理:若页面通过JavaScript加载数据,需使用Selenium或Playwright。
第三章:爬虫核心技术解析(深度扩展)
3.1 请求库:Requests与aiohttp
异步爬虫原理
import aiohttp
import asyncioasync def fetch(session, url):async with session.get(url) as response:return await response.text()async def main(urls):async with aiohttp.ClientSession() as session:tasks = [fetch(session, url) for url in urls]return await asyncio.gather(*tasks)urls = [f'https://example.com/page/{i}' for i in range(1,11)]
results = asyncio.run(main(urls))
代码解读:
- 协程与事件循环:
async/await
定义异步函数,asyncio.run()
启动事件循环。aiohttp.ClientSession()
管理HTTP连接池,复用TCP连接提升性能。
- 并发控制:
asyncio.gather()
并发执行多个任务,适用于I/O密集型场景(如批量请求)。- 可通过信号量(
asyncio.Semaphore
)限制最大并发数,避免被封IP。
扩展知识点:
- 性能优化:异步爬虫比同步爬虫快5-10倍,但需注意目标网站的并发限制。
- 错误重试机制:为每个任务添加重试逻辑,例如使用
tenacity
库。
3.2 解析库:BeautifulSoup与lxml
XPath高级用法
from lxml import etreehtml = """
<div class="product"><h3 data-id="1001">Python编程</h3><p class="price">¥59.00</p>
</div>
"""tree = etree.HTML(html)
title = tree.xpath('//h3[@data-id="1001"]/text()')[0]
price = tree.xpath('//p[@class="price"]/text()')[0]
代码解读:
- 属性过滤:
@data-id="1001"
筛选具有特定属性的元素。 - 文本提取:
text()
获取元素文本内容,返回列表形式(需索引取值)。
扩展知识点:
- XPath函数:
contains()
://div[contains(@class, "product")]
匹配部分类名。starts-with()
://h3[starts-with(text(), "Python")]
匹配前缀文本。
- 性能对比:
lxml
解析速度比BeautifulSoup
快约10倍,适合处理大规模数据。
3.3 数据存储:CSV/MySQL/MongoDB
MongoDB批量插入优化
from pymongo import MongoClient
from pymongo.errors import BulkWriteErrorclient = MongoClient('mongodb://localhost:27017/')
db = client['crawler_db']
collection = db['products']data_list = [{'title': f'Book{i}', 'price': i*10} for i in range(1000)]try:collection.insert_many(data_list, ordered=False)
except BulkWriteError as e:print("部分插入失败:", e.details)
代码解读:
- 批量插入:
insert_many()
比逐条插入快数十倍。 - 错误处理:
ordered=False
允许继续插入剩余文档,即使部分文档插入失败。
扩展知识点:
- 索引优化:为常用查询字段(如
price
)创建索引,加速查询。 - 分片集群:当数据量超单机负载时,使用MongoDB分片集群实现水平扩展。
第四章:高级反爬策略与突破技巧(新增内容)
4.1 验证码识别方案
使用Tesseract-OCR识别简单验证码
from PIL import Image
import pytesseract
import requests# 下载验证码图片
url = 'https://example.com/captcha'
response = requests.get(url)
with open('captcha.png', 'wb') as f:f.write(response.content)# 图像预处理与识别
image = Image.open('captcha.png').convert('L') # 转为灰度图
image = image.point(lambda x: 0 if x < 128 else 255) # 二值化
text = pytesseract.image_to_string(image)
print(f"识别结果: {text}")
技术要点:
- 图像预处理:通过灰度转换、二值化、去噪提升识别准确率。
- 模型训练:若Tesseract效果不佳,可使用CNN训练自定义验证码识别模型。
4.2 浏览器指纹伪装
使用fake_useragent随机User-Agent
from fake_useragent import UserAgent
import requestsua = UserAgent()
headers = {'User-Agent': ua.random,'Accept-Language': 'en-US,en;q=0.9',
}response = requests.get('https://example.com', headers=headers)
技术要点:
- 动态User-Agent:每次请求使用不同浏览器标识,降低被封风险。
- 扩展头信息:添加
Accept-Encoding
、Referer
等字段,模拟真实浏览器。
第五章:分布式爬虫架构设计(新增内容)
5.1 Scrapy-Redis架构
搭建分布式爬虫集群
# settings.py
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = 'redis://localhost:6379/0'# spider.py
class MySpider(RedisSpider):name = 'distributed_spider'redis_key = 'mycrawler:start_urls'def parse(self, response):# 解析逻辑pass
架构组件:
- Redis:作为任务队列和去重存储。
- Scrapy-Redis:扩展Scrapy支持分布式。
- Master节点:负责URL调度;Worker节点:执行爬取任务。
5.2 基于Celery的异步任务调度
定义爬虫任务队列
from celery import Celeryapp = Celery('crawler', broker='redis://localhost:6379/0')@app.task
def crawl_page(url):try:response = requests.get(url)# 解析并存储数据return {'status': 'success', 'url': url}except Exception as e:return {'status': 'failed', 'error': str(e)}
技术要点:
- 任务分发:通过
delay()
方法异步执行任务。 - 结果监控:使用Flower监控任务状态和性能。
第六章:法律合规与伦理实践(深度扩展)
6.1 数据隐私保护
GDPR合规处理
import hashlibdef anonymize_data(data):"""匿名化用户敏感信息"""if 'email' in data:data['email_hash'] = hashlib.sha256(data['email'].encode()).hexdigest()del data['email']return data
合规要求:
- 数据最小化:仅收集必要信息。
- 加密存储:使用AES或SHA256加密敏感字段。
- 用户授权:提供数据删除接口(如
/api/delete_user
)。
结语:爬虫技术的未来趋势
随着人工智能和云计算的深度融合,爬虫技术将呈现以下趋势:
- 智能化解析:结合LLM(如GPT-4)自动生成解析规则。
- 边缘计算:在CDN节点部署轻量级爬虫,减少网络延迟。
- 联邦学习:在不获取原始数据的前提下训练模型,满足隐私合规。
通过掌握上述核心技术,开发者不仅能高效获取数据,还能在合规前提下挖掘数据价值,为业务决策提供坚实支持。
相关文章:
Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)
Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展) 文章目录 Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)前言:数据时代的爬虫使命第一章:Py…...
【网络入侵检测】基于源码分析Suricata的统计模块
【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 1. 概要 👋 在 Suricata 的配置文件中,stats 节点用于配置统计信息相关的参数,它的主要作用是控制 Suricata 如何收集和输出统计数据,帮助用户了解 Suricata 的运行状态和…...
JDBC之Blob类型使用的实现
目录 一、 MySql Blob类型简介 1. Mysql中的Blob类型 2. Blob类型使用的注意事项 二. 插入Blob类型数据 1. 创建表 2. 通过PreparedStatement存储Blob类型数据 三. 解除文件大小限制 四、 读取Blob类型数据 前言 本文来讲解JDBC中的Blob类型 个人主页:艺杯羹…...
truffle
文章目录 truffle目录结构各文件作用在本地测试合约 truffle 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/04-web3js-truffle/README-CN.md Truffle 是基于 Solidity 语言的一套开发框架,它简化了去中心化应用(Dapp&…...
网盘不限速
引言 哈喽小伙伴们!说到网盘下载,是不是感觉心头一紧?特别是像某度那样不开会员就限速到怀疑人生!就连之前号称不限速的阿里云盘,现在也是限的死死的。 随着阿里网盘开始限速,很多小伙伴开始转战其他平台。…...
TVM中的Pass两种实现方法?如何选择?
以下是TVM中基于DFPatternCallback和VisitDFPattern两种编写Pass的方法的详细对比与示例总结: 1. 核心概念对比 特性DFPatternCallbackVisitDFPattern (DFPatternFunctor)抽象层级声明式模式匹配命令式访问者模式适用场景简单/中等复杂度的模式匹配需要精细控制匹配…...
JAVA EE_网络原理_UDP与TCP
人海中未遇见时,我将独自前行... ----------陳長生. 1.UDP协议 1.1.UDP协议端格式 UDP(用户数据报协议)是由 源端口,目标端口,长度,校验和,数据 5种结构组成。16位是UDP报文中字段的长度&#…...
智能Python开发工具PyCharm v2025.1——AI层级功能重磅升级
JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 立即获取PyCharm v2025.1正式版 具体更新内容: PyCh…...
15、项目搭建:绘制城堡蓝图——React 19 工程配置
一、魔法结界初始化 1. 召唤项目骨架 npx create-next-applatest hogwarts-castle --ts --tailwind 核心咒语: • --ts:激活预言水晶球(TypeScript类型安全) • --tailwind:注入飞天扫帚级原子样式(…...
docker搭建swarm集群
环境准备 主机名 IP 角色 manger1 192.168.111.47 管理节点 worker1 192.168.111.48 工作节点 worker2 192.168.111.49 工作节点 注:三台主机都已经拉去完swarm和…...
普通IT的股票交易成长史--20250428晚
声明:本文章的内容只是自己学习的总结,不构成投资建议。文中观点基本来自yt站Andylee,美股Alpha姐,综合自己的观点得出。感谢他的无私分享。 仓位就是生命,绝对不能满仓!!!…...
【React Native】精通 react native
活到老,学到老。 一、基础核心 JavaScript/TypeScript 基础 掌握 ES6+ 语法(箭头函数、解构、Promise、async/await)。熟悉 TypeScript(类型系统、接口、泛型)以提高代码质量。React 核心概念 组件化开发(函数组件、类组件)。状态管理(useState, useEffect, useContex…...
微信小程序-van-uploader的preview-size
preview-size支持数组格式 修改前修改后1、升级微信小程序里面的van版本:2、 重新构建npm3、重启微信开发工具 修改前 引用van组件的上传文件,设置预览图尺寸,刚开始设置的是preview-size“140”,出来的效果就是一个正方形。 修改后 1、升级…...
成员方法的详细说明(结合Oracle官方文档)
在Java的对象创建过程中,成员方法的地址并不存储在对象的堆内存中。Java虚拟机的设计说明(包括Oracle的Java虚拟机规范、OpenJDK文档、以及HotSpot的设计文档)都明确区分了对象的实例数据(存储在堆内存中)和类的元数据…...
[蓝桥杯刷题]---模拟法[2]日期问题
题目如下: 题目的意思是: 给出一个日期(格式是yy mm dd,注意年份只有两位数),要找出所有可能的真实日期(合法的yyyy-mm-dd格式)。 需要考虑: 年份范围在1960到2059。 输入的yy、mm、…...
阿里开源图生动画模型AnimateAnyone2
项目背景 近年来,基于扩散模型(diffusion models)的人物图像动画化方法取得了显著进展,例如 Animate Anyone 在生成一致性和泛化性方面表现优异。然而,这些方法在处理人物与环境之间的空间关系和人-物体交互࿰…...
02_使用 AES 算法实现文件加密上传至阿里云、解密下载
02_使用 AES 算法实现文件加密上传至阿里云、解密下载 一、文件上传下载接口 controller 层 RestController RequestMapping("/api/common/file") Api(tags "公共文件上传") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…...
Linux运维——Vim基础
Vim基础 一、移动光标1.1、基础移动1.2、屏幕滚动 二、编辑操作2.1、插入模式2.2、删除与修改2.3、复制粘贴 三、搜索与替换3.1、搜索3.2、替换 4、分屏与窗口管理4.1、分屏操作4.2、窗口调整 五、宏与批量操作六、效率技巧 一、移动光标 1.1、基础移动 快捷键作用h j k l左/…...
从外卖大战看O2O新趋势:上门私厨平台系统架构设计解析
京东高调进军外卖市场,美团全力防守,两大巨头的竞争让整个行业风起云涌。但在这场外卖大战之外,一个更具潜力的细分市场正在悄然兴起——上门私厨服务。 与标准化外卖不同,上门私厨提供的是个性化定制服务。厨师带着新鲜食材上门现…...
【网络编程】ARP协议与主机之间的通信
1. 什么是ARP协议? ARP(地址解析协议,Address Resolution Protocol) 是一种用于在网络中将IP地址转换为MAC地址的协议。它属于TCP/IP协议栈中的网络层协议,通常在局域网(LAN)环境下使用&#x…...
JVM模型、GC、OOM定位
JVM模型 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来…...
什么是数据链路层的CRC检测以及为什么要放到帧尾?
数据链路层在封装过程中添加CRC(循环冗余校验)帧尾,主要目的是为了检测数据传输过程中可能出现的比特错误,确保数据的完整性和可靠性。具体原因如下: 1. 错误检测 物理层传输的不可靠性:数据在物理介质&am…...
Electron 入门指南
Electron 入门指南 Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架。通过 Electron,你可以利用 Web 技术开发出功能强大的桌面应用程序,并且能够运行在 Windows、Mac 和 Linux 系统上。 本文将带你从零开始构建一个简单的 Ele…...
目标检测YOLO实战应用案例100讲- 无人机平台下露天目标检测与计数
目录 知识储备 基于YOLOv8改进的无人机露天目标检测与计数 一、环境配置与依赖安装 二、核心代码实现(带详细注释) 1. 改进YOLOv8模型定义(添加注意力机制) 2. 无人机视角数据增强(drone_augment.py ) 3. 多目标跟踪与计数(tracking_counter.py ) 4. 完整推理流…...
ArkTS基础实验 (二)
任务一:使用模板字符串相关知识,实现多个变量的拼接。同学们可以把自己的姓名、年纪和爱好这三个变量进行拼接。把代码和日志中console.log的打印结果截图保留。 预期效果: 任务二:使用状态变量和点击事件相关知识实现计数器案例…...
【计算机视觉】Bayer Pattern与Demosaic算法详解:从传感器原始数据到彩色图像
Bayer Pattern与Demosaic算法详解:从传感器原始数据到彩色图像 一、引言 在现代数码相机和手机摄像头中,我们能够拍摄到丰富多彩的彩色图像。然而,你可能不知道的是,图像传感器本身并不能直接感知颜色——它们只能感知光的强度。…...
媒体查询使用
一、引言 为了确保网页在不同设备上都能提供良好的用户体验,响应式设计变得至关重要。而媒体查询(Media Queries)就是前端开发中实现响应式设计的核心技术之一。 二、媒体查询的概念 媒体查询是 CSS3 引入的一项强大功能,它允许开…...
deepseek对IBM MQ SSL 证书算法的建议与解答
在IBM MQ配置SSL TLS的命令中,如果参数SSLCIPH使用TLS_RSA_WITH_AES_128_CBC_SHA256,如下所示: DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME(QM1.MACH.COM) XMITQ(QM2) SSLCIPH(TLS_RSA_WITH_AES_128_CBC_SHA256) DESCR(S…...
服务器文件同步工具有哪些?
服务器文件同步工具的选择取决于你的具体需求(如实时同步、单向/双向同步、跨平台支持、安全性等)。以下是几款主流的服务器文件同步工具推荐,适用于不同场景: 1. 实时同步工具(适合高频率、低延迟需求) rsync 特点:经典增量同步工具,支持本地/远程同步,高效节省带宽。…...
Numpy数组与矩阵——python学习
我前面提到过Numpy函数,但是不够全,在这里我顺便做一些补充。先说明一下我用的是Notebook。 一、数组的创建与操作 1、把列表转换为数组 np.array([1,2,3,4,5]) 2、把元组转换为数组 np.array((1,2,3,4,5)) 3、把range对象转换为数组 np.array(rang…...
CasaOS上部署1Panel开源运维面板远程在线访问配置实操指南
文章目录 前言1. 添加镜像源2. 部署1Panel3. 本地访问测试4. 安装内网穿透工具5. 配置公网地址6. 配置固定公网地址 前言 很多时候在尝试远程管理服务器时,常常会遇到各种各样的麻烦,尤其是缺乏公网IP或者路由器设置过于复杂时,更是让人感到…...
深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现
一、LRU (Least Recently Used - 最近最少使用) LRU 策略的核心思想是:当缓存空间不足时,优先淘汰最近最长时间未被访问的数据。它基于“时间局部性”原理,即最近被访问的数据,在未来被访问的概率也更高。 LeetCode 146. LRU 缓…...
小智项目架构分析
小智代码架构 .github 这就是github项目上拉下来的一些信息 没什么好看的,这跟项目代码无关 .build 编译时生成的文件,没什么可看的,与项目代码无关 .main 主要的代码都在这里面了 .managed_components 这里是小智用到的一些第三方移植…...
基于 SSE 和分块传输的 Uniapp 微信小程序 实现 流式传输 对话
最近的项目是做微信小程序的一个对话框,接入DeepSeek,实现实时对话一个功能。 主要用到的技术点为: 1. Server-Sent Events (SSE) 技术: 在请求头中设置了 ‘X-DashScope-SSE’: ‘enable’,启用了SSE协议 服务器以事…...
[OS] POSIX C库介绍
POSIX C 库可以理解为 Unix/Linux系统的"标准化工具包",用一句话概括就是: 👉 它提供了一套跨Unix系统的统一编程接口,让开发者用同一份代码能在不同系统(如Linux、macOS)中运行。 核心组成&…...
<uniapp><插件><UTS>在uniapp中,创建自己的插件并发布到uni插件市场
前言 本专栏是基于uniapp实现手机端各种小功能的程序,并且基于各种通讯协议如http、websocekt等,实现手机端作为客户端(或者是手持机、PDA等),与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统&…...
深度学习前沿探秘:Transformer 模型与多领域应用
技术点目录 注意力(Attention)机制详解自然语言处理(NLP)领域的Transformer模型详解计算视觉(CV)领域的Transformer模型详解时间序列建模与预测的大语言模型目标检测算法详解目标检测的大语言模型语义分割的…...
介绍下Nginx的作用与请求转发机制
引言 最近笔者在业务中遇到了Nginx轮训策略使用不当导致后端服务的压力增加,从而导致容器CPU资源不足,响应超时的问题; 但由于对Nginx的了解仅限与作为反向代理使用,所以借用GPT工具整理了Nginx的作用以及请求转发机制ÿ…...
Sql刷题日志(day6)
一、笔试 1、insert ignore:在插入数据时忽略主键冲突或其他唯一性约束冲突。 如果插入的记录会导致主键冲突(如 actor_id 已存在),该语句不会报错,而是直接忽略插入操作 语法: INSERT IGNORE INTO tab…...
Ajax 提交表单与文件上传
目录 一、Ajax 提交表单1.1 基本原理1.2 HTML 表单示例1.3 JavaScript 示例(使用 fetch API)二、Ajax 文件上传2.1 基本原理2.2 HTML 文件上传表单示例2.3 JavaScript 示例(使用 fetch API)三、后端处理示例(以 Node.js + Express 为例)3.1 安装依赖3.2 创建服务器文件四…...
【零基础入门】ASP.NET Core快速搭建第一个Web应用
一、为什么选择ASP.NET Core? 跨平台支持:可在Windows/macOS/Linux系统运行 高性能:比传统ASP.NET框架快10倍以上 开源生态:活跃的开发者社区和丰富的NuGet包 云原生支持:完美适配Docker和Kubernetes部署 二、开发…...
盒子模型
1.1看透网页布局的本质 1.2盒子模型的组成部分 css盒子模型本质是一个盒子,封装周围的html元素,它包括边框 外边距 内边距和实际内容。 padding:盒子与内容间的距离margin:盒子与盒子间的距离 1.3border边框 1.border-width 边…...
厚铜PCB如何兼顾质量与成本?供应商设计规范执行的黄金平衡点
厚铜电路板供应商需要遵循一系列设计规范,以确保所提供的电路板符合行业标准和客户要求。以下是一些需要遵循的设计规范: 1. 电路板尺寸和形状:厚铜电路板供应商需要按照客户提供的规格和要求来设计电路板的尺寸和形状。一般来说,…...
Kafka 配置参数性能调优建议
文章目录 1、生产者调优batch.size(重要)linger.mscompression.typeacks(重要)buffer.memorymax.in.flight.requests.per.connection(重要)message.max.bytes(重要) 2、消费者调优fe…...
Java读Excel:解析阿里云easyExcel导入文件的行号
文章目录 引言I 解析阿里云easyExcel导入文件的行号声明解析对象的基类判断Excel解析对象类型是否包含继承某个类 isAssignableFromJava 转换list类型并设置下标到元素对象属性II 封装excel 文件读取excel 文件读取用法文件导入上下文III 参数校验工具类校验参数是否合法 (jaka…...
Vuex持续保存数据 页面刷新不丢失 vuex-persistedstate
vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据状态持久化,但是太麻烦每次都要操作,强烈建议使用插件利用vuex-persistedstate插件. 安装 npm …...
.NET8配置组件
一、组件的概念 含义:用于从配置文件中读取配置的组件,叫做配置组件。简单来说, 就是从xml、json、yaml、txt等文件中读取配置的组件。主要采用微软提供的 Microsoft.Extensions.Configuration 二、组件的使用 1、json配置读取 (1)、在Dunk.Common.Project.Configuratio…...
加密算法:ed25519和RSA
ed25519 和 RSA 是两种不同的非对称加密算法,常用于 SSH 密钥认证。以下是它们的对比和选择建议: 1. 算法对比 特性ed25519RSA (4096-bit)安全性更高(基于椭圆曲线密码学 ECC)高(依赖大数分解难度)密钥长度固定 256 位(公钥/私钥更短)通常 2048/4096 位(公钥较大)性能…...
递归、搜索和回溯算法《递归》
在之前的优选算法当中我们已经学习了一些基本的算法,那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法,其实也就是大家常常听到的dfs、bfs;其实本质就是递归,在学习搜索、回溯等算法的过程当中我们会先来…...
构建“云中”高并发:12306技术改造的系统性启示
作为曾参与12306余票查询系统高并发升级的技术从业者,笔者注意到公众对于12306底层技术常存在认知盲区。为破解这一迷思,特此分享十年前的架构解密文献(该技术之前名叫 gemfire 现已晋升为Apache顶级项目Geode,代码库详见…...