Python网络爬虫实战:从公开网页采集与整理小说内容的技术方案

发布时间:2026/9/3 8:46:45

Python网络爬虫实战:从公开网页采集与整理小说内容的技术方案
你是不是也遇到过这样的烦恼想追一本热门小说结果发现需要付费才能看完整版或者好不容易找到一个免费阅读网站却要忍受满屏的广告和糟糕的阅读体验。更让人头疼的是这些付费小说往往分散在各个不同的平台每个平台都有自己的会员体系想“追更”就得不断充值。今天要聊的就是一个能帮你解决这个痛点的技术方案。注意这不是一个现成的“破解工具”也不是教你如何绕过付费墙去侵犯版权。相反这是一个基于 Python 的、用于学习和研究网络爬虫技术的实践项目。通过它你可以理解如何从公开的、结构化的网页中提取文本信息并将其整理成本地文件。这背后涉及到的 HTTP 请求、HTML 解析、数据清洗和文件操作是每一位后端开发工程师、数据分析师乃至安全研究员的必备技能。这篇文章不会给你一个“一键破解VIP”的魔法按钮但会给你一套完整的、可运行的 Python 源码并详细拆解其背后的技术原理、实现步骤和关键代码。你将学到如何分析一个小说网站的页面结构。如何编写健壮的爬虫来应对网站的反爬机制。如何将爬取的内容优雅地保存为本地 ePub 或 TXT 文件。在整个过程中有哪些法律和伦理的边界绝对不能逾越。读完本文你不仅能获得一套可以自己定制和扩展的代码更能深刻理解“数据获取”技术的两面性以及如何将其应用于正当的学习和自动化场景。1. 核心问题我们到底在“爬”什么在开始写代码之前必须澄清一个关键概念本项目所指的“获取小说内容”其对象必须是法律允许且符合网站Robots协议的公开资源。例如某些网站提供了小说的免费试读章节或者存在公益性质的文库。我们的技术目标是自动化地收集这些已公开的片段信息并进行本地化整理以提升个人阅读体验如去除广告、统一格式而非盗取付费内容。这里存在一个常见的误区很多人认为爬虫就是“万能钥匙”可以拿到任何数据。实际上爬虫只是自动化访问网页的工具能否获取数据取决于目标服务器是否愿意提供。绕过付费验证、破解加密内容这些行为已经超出了普通爬虫的范畴涉及法律风险。因此本文的立场和技术路径非常明确只针对公开可访问的网页内容进行自动化收集与整理。那么一个合规的、用于学习的小说内容收集工具需要解决哪些技术问题呢多源适配不同网站结构千差万别爬虫需要一定的灵活性来解析不同页面。反爬应对网站可能会通过请求头校验、IP频率限制、动态加载JavaScript等技术阻挡爬虫。内容清洗爬取的HTML包含大量广告、导航等无关标签需要精确提取正文文本。持久化存储需要将章节内容有序地保存为结构化的本地文件如分章节的TXT或标准ePub格式。健壮性网络可能中断页面结构可能微调爬虫需要具备一定的错误处理和恢复能力。接下来我们将围绕这些技术问题构建一个虽不“万能”但足够健壮、且极具学习价值的小说内容收集脚本。2. 环境准备与核心库介绍本项目基于 Python 3.7 版本。Python 是网络爬虫领域的首选语言拥有极其丰富的生态库。我们主要依赖以下几个库requests用于发送 HTTP 请求获取网页源代码。它比 Python 内置的urllib更简单易用。BeautifulSoup4 (bs4)用于解析 HTML 或 XML 文档从复杂的网页标签树中轻松提取所需数据。lxml一个高性能的 HTML/XML 解析器BeautifulSoup可以选用它作为解析后端速度更快。fake-useragent用于随机生成真实的浏览器 User-Agent 字符串是绕过基础反爬基于请求头识别的常用手段。安装命令打开你的命令行终端CMD、PowerShell 或 Terminal执行以下命令来安装依赖库。建议先创建一个虚拟环境。# 使用 pip 安装所需库 pip install requests beautifulsoup4 lxml fake-useragent可选但推荐的库tqdm在命令行中显示美观的进度条在爬取多章节时非常有用。pip install tqdmebooklib与markdown如果你希望生成更专业的 ePub 电子书格式需要这两个库进行格式转换与封装。pip install ebooklib markdownIDE 选择任何文本编辑器或 IDE 均可。推荐使用VS Code或PyCharm它们对 Python 的支持非常友好便于代码调试和管理。3. 项目结构与核心流程拆解在动手编码前我们先规划一下项目的整体结构和执行流程。一个结构清晰的代码易于维护和扩展。项目目录结构novel_downloader/ ├── main.py # 主程序入口 ├── spider.py # 爬虫核心模块负责请求和解析 ├── saver.py # 内容保存模块负责文件存储 ├── utils.py # 工具函数如URL处理、请求头生成 ├── config.py # 配置文件存放网站规则、保存路径等 └── novels/ # 默认的小说保存目录 └── 《小说书名》/ ├── info.json # 保存小说元信息书名、作者、简介 └── chapters/ # 按章节保存的文本文件 ├── 第1章.txt ├── 第2章.txt └── ...核心工作流程输入与配置用户提供小说目录页的 URL。程序加载对应网站的解析规则config.py中预定义或动态分析。获取目录爬虫访问目录页解析出所有章节的标题和链接。遍历章节按顺序遍历每个章节链接。获取内容对每个章节页面发起请求解析出正文内容并清理掉广告、脚本等无关信息。保存内容将清理后的正文按照章节标题保存为本地文件。生成元信息可选步骤将小说书名、作者等信息保存为info.json。进度与容错显示爬取进度遇到网络错误时进行重试或跳过。这个流程看似简单但每个环节都有“坑”。下面我们用代码来一步步实现并规避这些“坑”。4. 核心模块代码实现我们将按照模块来构建代码。首先从工具函数和配置开始。4.1 配置文件 (config.py)配置文件用于存放不同网站的解析规则这是一种可扩展的设计。我们以一个假设的公开小说网站example.com为例。# config.py 网站解析规则配置。 ‘selectors’ 使用 CSS 选择器语法这是 BeautifulSoup 和网页前端开发通用的语法。 SITE_RULES { www.example.com: { encoding: utf-8, # 网页编码 chapter_list_selector: .chapter-list a, # 章节列表项的CSS选择器 chapter_title_selector: .chapter-title, # 章节标题的CSS选择器 chapter_content_selector: .chapter-content, # 章节正文的CSS选择器 next_page_selector: .next-page, # 下一页链接的CSS选择器用于分页加载 }, # 可以继续添加其他网站的规则例如 # www.another-novel-site.org: { ... } } # 全局配置 DEFAULT_HEADERS { Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9,en;q0.8, Connection: keep-alive, } REQUEST_TIMEOUT 10 # 请求超时时间秒 RETRY_TIMES 3 # 失败重试次数 SAVE_PATH ./novels # 小说保存根目录关键点解释CSS 选择器如.chapter-list a表示选择所有class属性包含chapter-list的元素下的所有a标签。这是定位网页元素最常用的方法之一。编码正确指定网页编码如gbk,utf-8是避免中文乱码的关键。可扩展性通过字典结构存储规则新增网站只需添加一个新条目。4.2 工具模块 (utils.py)这个模块包含一些通用的辅助函数。# utils.py import random from fake_useragent import UserAgent from urllib.parse import urljoin, urlparse def get_random_headers(): 生成随机的请求头特别是User-Agent用于模拟真实浏览器访问。 ua UserAgent() headers { User-Agent: ua.random, Referer: https://www.google.com/, # 可以随机设置或使用目标网站域名 } return headers def normalize_url(base_url, link): 将相对URL转换为绝对URL。 例如base_urlhttp://a.com/b/, linkc.html - http://a.com/b/c.html return urljoin(base_url, link) def get_site_key(url): 从URL中提取主域名用于匹配 SITE_RULES 中的配置。 parsed_url urlparse(url) return parsed_url.netloc # 例如 ‘www.example.com’ def is_valid_url(url): 简单的URL有效性检查。 parsed urlparse(url) return bool(parsed.scheme) and bool(parsed.netloc)4.3 爬虫核心模块 (spider.py)这是项目的核心负责所有的网络请求和页面解析。# spider.py import requests import time from bs4 import BeautifulSoup from .utils import get_random_headers, normalize_url, get_site_key from .config import SITE_RULES, REQUEST_TIMEOUT, RETRY_TIMES class NovelSpider: def __init__(self, start_url): self.start_url start_url self.site_key get_site_key(start_url) self.site_rule SITE_RULES.get(self.site_key, {}) self.encoding self.site_rule.get(encoding, utf-8) self.session requests.Session() # 使用Session可以保持Cookie提高效率 def fetch_page(self, url): 获取网页内容包含重试机制。 headers get_random_headers() for i in range(RETRY_TIMES): try: resp self.session.get(url, headersheaders, timeoutREQUEST_TIMEOUT) resp.raise_for_status() # 如果状态码不是200抛出HTTPError异常 resp.encoding self.encoding return resp.text except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e: print(f请求失败 ({i1}/{RETRY_TIMES}): {url}, 错误: {e}) if i RETRY_TIMES - 1: time.sleep(2 ** i) # 指数退避策略等待 else: print(f重试{ RETRY_TIMES }次后仍失败跳过此URL: {url}) return None return None def parse_chapter_list(self, html): 从目录页HTML中解析出章节列表标题和链接。 if not html: return [] soup BeautifulSoup(html, lxml) # 使用lxml解析器速度更快 chapter_list_selector self.site_rule.get(chapter_list_selector, ) if not chapter_list_selector: # 如果没有预定义规则可以尝试一些通用选择器或打印soup让用户手动分析 print(未找到章节列表选择器规则请检查config.py配置。) # 例如尝试查找所有包含‘chapter’或‘第’字的链接 all_links soup.find_all(a) chapter_links [] for link in all_links: if link.get(href) and (章 in link.text or chapter in link.text.lower()): chapter_links.append((link.text.strip(), normalize_url(self.start_url, link[href]))) return chapter_links chapter_elements soup.select(chapter_list_selector) chapters [] for elem in chapter_elements: title elem.text.strip() link elem.get(href) if link: full_url normalize_url(self.start_url, link) chapters.append((title, full_url)) return chapters def parse_chapter_content(self, html, url): 从章节页HTML中解析出正文内容。 if not html: return , soup BeautifulSoup(html, lxml) # 解析标题 title_selector self.site_rule.get(chapter_title_selector, h1) title_elem soup.select_one(title_selector) chapter_title title_elem.text.strip() if title_elem else 未知章节 # 解析正文 content_selector self.site_rule.get(chapter_content_selector, ) if not content_selector: # 启发式查找寻找包含大量文本且没有太多链接的标签 # 这是一个简化策略实际应用需要更精细的算法如Readability candidates soup.find_all([div, article]) best_candidate None for cand in candidates: text_len len(cand.get_text(stripTrue)) link_count len(cand.find_all(a)) # 简单的启发文本长而链接少的元素很可能是正文 if text_len 200 and link_count 10: best_candidate cand break content_elem best_candidate else: content_elem soup.select_one(content_selector) if not content_elem: return chapter_title, [未找到正文内容] # 清理内容移除脚本、样式、广告等无关标签 for tag in content_elem([script, style, ins, iframe, button, nav, footer, aside]): tag.decompose() # 获取纯文本并处理多余的空行 content_text content_elem.get_text() content_lines [line.strip() for line in content_text.split(\n) if line.strip()] cleaned_content \n\n.join(content_lines) return chapter_title, cleaned_content代码深度解析Session对象使用requests.Session()可以在多次请求间保持 cookies 和连接比每次创建新连接更高效。指数退避重试time.sleep(2 ** i)在每次重试前等待更长时间1秒2秒4秒...这是一种礼貌且有效的重试策略避免对服务器造成压力。CSS 选择器与备用方案核心解析依赖于site_rule中预定义的 CSS 选择器。如果没有配置代码提供了一个简单的启发式方法作为后备方案。对于生产环境可以考虑集成更智能的正文提取库如readability-lxml或trafilatura。内容清洗tag.decompose()方法将指定的无关标签从 DOM 树中彻底移除这是 BeautifulSoup 清理内容的标准做法。4.4 内容保存模块 (saver.py)这个模块负责将爬取到的内容持久化到本地文件系统。# saver.py import os import json import re from pathlib import Path class NovelSaver: def __init__(self, base_path./novels): self.base_path Path(base_path) self.base_path.mkdir(parentsTrue, exist_okTrue) def sanitize_filename(self, filename): 清理文件名移除操作系统不允许的字符。 # 移除Windows/Linux/Unix文件名中的非法字符 illegal_chars r[:/\\|?*\x00-\x1f] filename re.sub(illegal_chars, _, filename) # 限制文件名长度 if len(filename) 200: name, ext os.path.splitext(filename) filename name[:200-len(ext)] ext return filename def save_novel_info(self, novel_title, author未知, description): 保存小说的元信息到JSON文件。 novel_dir self.base_path / self.sanitize_filename(novel_title) novel_dir.mkdir(exist_okTrue) info { title: novel_title, author: author, description: description, saved_time: time.strftime(%Y-%m-%d %H:%M:%S) } info_file novel_dir / info.json with open(info_file, w, encodingutf-8) as f: json.dump(info, f, ensure_asciiFalse, indent2) return novel_dir def save_chapter(self, novel_dir, chapter_title, content, chapter_index): 按章节保存小说内容为单独的TXT文件。 chapters_dir novel_dir / chapters chapters_dir.mkdir(exist_okTrue) safe_title self.sanitize_filename(chapter_title) # 文件名前补零方便排序 filename f{chapter_index:04d}_{safe_title}.txt filepath chapters_dir / filename with open(filepath, w, encodingutf-8) as f: f.write(f{chapter_title}\n\n) f.write(content) print(f已保存: {filename}) return filepath def merge_to_single_file(self, novel_dir, output_formattxt): 将所有章节合并为一个完整的文件。 chapters_dir novel_dir / chapters if not chapters_dir.exists(): print(章节目录不存在无法合并。) return # 按文件名排序因为前面补了零 chapter_files sorted(chapters_dir.glob(*.txt)) if not chapter_files: print(没有找到章节文件。) return merged_content [] for cf in chapter_files: with open(cf, r, encodingutf-8) as f: merged_content.append(f.read()) output_file novel_dir / f{novel_dir.name}_完整版.{output_format} with open(output_file, w, encodingutf-8) as f: f.write(\n\n *50 \n\n.join(merged_content)) print(f已合并为完整文件: {output_file}) return output_file关键点解释路径处理使用pathlib.Path代替传统的os.path代码更现代、跨平台。文件名清理sanitize_filename函数至关重要它防止因章节标题包含非法字符如:?而导致文件保存失败。文件排序通过f{chapter_index:04d}_{safe_title}.txt的命名方式可以确保文件按章节顺序自然排序04d表示用4位数字补零。模块化设计分离了保存元信息、保存单章节、合并文件等功能结构清晰易于测试和扩展例如未来支持 ePub 生成。4.5 主程序入口 (main.py)最后我们将所有模块组合起来形成一个完整的、可交互的程序。# main.py import time from spider import NovelSpider from saver import NovelSaver from utils import is_valid_url from tqdm import tqdm # 用于显示进度条 def main(): print( * 50) print(小说内容收集工具 (用于技术学习)) print( * 50) print(提示请确保您拥有内容的合法获取权限并遵守目标网站的Robots协议。) print(- * 50) # 1. 用户输入 start_url input(请输入小说目录页的URL: ).strip() if not is_valid_url(start_url): print(URL格式无效请重新输入。) return novel_title input(请输入小说名称用于创建文件夹: ).strip() or 未命名小说 # 2. 初始化组件 spider NovelSpider(start_url) saver NovelSaver() # 3. 获取并解析目录 print(\n[步骤1] 正在获取章节目录...) catalog_html spider.fetch_page(start_url) if not catalog_html: print(无法获取目录页程序退出。) return chapters spider.parse_chapter_list(catalog_html) if not chapters: print(未解析到任何章节请检查URL或网站规则配置(config.py)。) return print(f共发现 {len(chapters)} 个章节。) # 4. 创建保存目录 novel_dir saver.save_novel_info(novel_title) print(f小说将保存至: {novel_dir}) # 5. 遍历爬取每个章节 print(\n[步骤2] 开始爬取章节内容...) success_count 0 fail_count 0 # 使用tqdm创建进度条 for idx, (ch_title, ch_url) in enumerate(tqdm(chapters, desc爬取进度), 1): print(f\n正在处理: {ch_title}) chapter_html spider.fetch_page(ch_url) if not chapter_html: fail_count 1 print(f - 获取失败跳过。) continue parsed_title, content spider.parse_chapter_content(chapter_html, ch_url) # 如果解析的标题为空使用原始标题 final_title parsed_title if parsed_title else ch_title saver.save_chapter(novel_dir, final_title, content, idx) success_count 1 # 礼貌性延迟避免请求过快 time.sleep(0.5) # 6. 汇总与合并 print(\n * 50) print(f爬取完成) print(f成功: {success_count} 章 失败: {fail_count} 章) if success_count 0: merge input(是否将所有章节合并为一个TXT文件(y/n): ).lower().strip() if merge y: saver.merge_to_single_file(novel_dir) print(合并完成) print(f\n所有文件已保存至: {novel_dir}) print(程序结束。) if __name__ __main__: main()5. 运行与效果验证现在让我们来运行这个程序看看效果如何。假设我们有一个用于测试的公开小说目录页 URL。运行步骤将上述所有代码文件 (config.py,utils.py,spider.py,saver.py,main.py) 放在同一个目录下。在命令行中进入该目录。运行主程序python main.py根据提示输入一个合法的、公开的小说目录页 URL 和小说名称。预期输出示例 小说内容收集工具 (用于技术学习) 提示请确保您拥有内容的合法获取权限并遵守目标网站的Robots协议。 -------------------------------------------------- 请输入小说目录页的URL: https://www.example.com/novel/123/ 请输入小说名称用于创建文件夹: 测试小说 [步骤1] 正在获取章节目录... 共发现 150 个章节。 小说将保存至: ./novels/测试小说 [步骤2] 开始爬取章节内容... 爬取进度: 100%|████████████| 150/150 [02:3000:00, 1.00章/s] 正在处理: 第1章 重生 - 已保存: 0001_第1章_重生.txt 正在处理: 第2章 觉醒 - 已保存: 0002_第2章_觉醒.txt ... 爬取完成 成功: 148 章 失败: 2 章 是否将所有章节合并为一个TXT文件(y/n): y 已合并为完整文件: ./novels/测试小说/测试小说_完整版.txt 所有文件已保存至: ./novels/测试小说 程序结束。验证结果打开./novels/测试小说/目录你会看到info.json包含小说元信息。chapters/文件夹包含所有按顺序编号的章节文本文件。测试小说_完整版.txt所有章节合并后的完整小说文件。用文本编辑器打开任意章节文件确认内容完整、无乱码、广告等无关信息已被清除。6. 常见问题与排查思路在实际运行中你几乎一定会遇到各种问题。下面是一个快速排查指南。问题现象可能原因排查方式解决方案程序报错ModuleNotFoundError依赖库未安装或虚拟环境未激活。在终端执行pip list检查requests,beautifulsoup4,lxml,fake-useragent是否存在。在正确的 Python 环境下运行pip install -r requirements.txt或手动安装缺失的包。获取目录页失败返回None1. 网络连接问题。2. 目标网站需要登录或验证。3. 触发了反爬机制如IP限制。4. URL 错误。1. 检查网络。2. 用浏览器手动访问该 URL看是否正常。3. 查看程序打印的错误信息。1. 确保URL正确且可公开访问。2. 在config.py中为该网站添加更真实的请求头如Cookie。3. 增加REQUEST_TIMEOUT和RETRY_TIMES。解析出的章节列表为空1. 网站结构已更新CSS选择器失效。2. 网页内容通过 JavaScript 动态加载。1. 打开浏览器开发者工具重新分析目录页的HTML结构。2. 查看spider.py中parse_chapter_list函数打印的soup内容。1. 更新config.py中对应网站的chapter_list_selector。2. 对于动态加载的网站可能需要使用Selenium或Playwright等浏览器自动化工具。章节内容乱码网页编码与程序设置不符。查看网页源码的head部分找到meta charset...标签。修改config.py中对应网站的encoding值例如从utf-8改为gbk。保存文件时提示“无效文件名”章节标题包含操作系统不允许的字符如\,/,:?*。检查saver.py中sanitize_filename函数的逻辑。该函数已处理大部分非法字符。如果仍有问题可以增加或修改正则表达式illegal_chars。爬取速度很慢1. 网络延迟高。2. 单线程顺序请求。3. 礼貌延迟 (time.sleep) 设置过长。观察程序运行时的网络状态。1. 可适当减少time.sleep的秒数如从0.5降到0.2但需注意不要给服务器造成过大压力。2. 对于大量章节可以考虑使用异步库如aiohttp或多线程进行并发请求但这会显著增加代码复杂度和对服务器的压力需谨慎使用。被网站屏蔽返回403错误请求头被识别为爬虫。对比程序发送的请求头与浏览器发送的请求头在开发者工具的Network面板查看。1. 确保fake-useragent正常工作User-Agent是随机的真实浏览器字符串。2. 在utils.py的get_random_headers中添加更多常见的请求头字段如Accept-Encoding,Cache-Control等。3. 考虑使用代理IP池高级话题本文不展开。7. 最佳实践与工程建议将这个脚本从“能用”提升到“好用”和“耐用”你需要考虑以下几点遵守 Robots 协议 在爬取任何网站前务必访问https://目标网站/robots.txt。这个文件规定了哪些路径允许或禁止爬虫访问。尊重robots.txt是网络爬虫的基本礼仪和法律合规的重要一环。设置合理的爬取间隔 在循环中time.sleep(random.uniform(1, 3))比固定间隔更友好可以模拟人类的不规律操作避免被识别为攻击性爬虫。错误处理与日志记录 目前的代码已将错误打印到控制台。对于长期运行的任务应该将日志写入文件并区分INFO,WARNING,ERROR等级别便于后续排查。可以使用 Python 内置的logging模块。配置化管理 我们将网站规则放在了config.py。更进一步可以将其改为 JSON 或 YAML 文件这样无需修改代码就能添加新网站规则。甚至可以做一个简单的规则学习功能让用户通过交互式点击来生成选择器。增量爬取与断点续传 如果爬取中途中断重新开始会浪费资源。可以设计一个状态文件如status.json记录已成功爬取的章节 URL。程序启动时先读取状态只爬取未完成的部分。内容去重与质量检查 有些网站会在正文中插入重复的广告段落。可以在spider.py的parse_chapter_content函数中加入简单的文本去重逻辑或者检查章节内容是否过短可能解析失败。法律与伦理底线再强调绝不爬取个人隐私数据。绝不绕过付费墙获取付费内容。本项目仅适用于公开、免费的内容。控制爬取频率和总量不要对目标网站服务器造成明显负担。将爬取的数据用于个人学习研究不要大规模传播或用于商业用途。8. 扩展方向从脚本到工具掌握了核心原理后你可以将这个脚本扩展得更强大图形界面 (GUI)使用PyQt5或Tkinter为脚本制作一个简单的桌面应用让非技术用户也能使用。Web 服务使用Flask或FastAPI将其包装成一个 Web 服务提供 RESTful API 来提交任务和查看进度。支持更多格式完善saver.py集成ebooklib库直接生成标准的 ePub 或 Mobi 电子书文件包含目录、封面和元数据。智能正文提取用更先进的算法如基于机器学习或深度学习训练的正文提取模型替代简单的启发式规则提高对不同网站结构的泛化能力。分布式爬虫对于超大型项目可以考虑使用Scrapy框架它原生支持分布式、中间件、管道等高级特性是生产级爬虫的首选。通过这个项目你学到的绝不仅仅是“下载小说”。你掌握的是自动化数据采集的核心工作流请求、解析、清洗、存储。这套方法论可以迁移到无数场景竞品价格监控、舆情分析、公开数据集构建、知识库更新等等。技术的价值在于创造和效率提升而非破坏规则。希望你能利用从这里学到的知识去解决那些真正有价值、且符合道德法律规范的问题。

相关新闻

Graft框架:为AI代码助手构建语义地图,提升代码生成准确率

Graft框架:为AI代码助手构建语义地图,提升代码生成准确率

2026/9/3 8:46:45

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

全局异常捕获,自定义异常处理类和返回体封装

全局异常捕获,自定义异常处理类和返回体封装

2026/9/3 8:46:45

文件结构ExceptionCode.Java 自定义异常码注解package com.example.xxxxx.config.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Retention…

32面向对象(中级)-多态

32面向对象(中级)-多态

2026/9/3 8:46:45

1.多态的基本介绍 多态 多种状态 同一个方法,对于不同的对象,会做出不同反应(结果),就是多态。 (1) 生活版:什么是多态? ①你有一个宠物喂食器喂食器只认识&#xff…

基于SpringBoot的家庭财务管理系统:从设计到部署的完整实战

基于SpringBoot的家庭财务管理系统:从设计到部署的完整实战

2026/9/3 9:46:48

简介:这是一份面向计算机专业本科生的毕业设计级家庭财务管理系统完整交付包,基于SpringBoot框架构建,解决个人或家庭日常收支记录、统计与可视化管理需求,适合作为课程设计、毕设选题及Java全栈开发能力训练项目。压缩包共807个文…

Python实现Markdown/HTML一键粘贴到Word/Excel:PasteMD工具开发全解析

Python实现Markdown/HTML一键粘贴到Word/Excel:PasteMD工具开发全解析

2026/9/3 9:46:48

简介:PasteMD 是一款面向程序员、技术文档撰写者及办公效率追求者的 Python 桌面工具,专为解决 Markdown、网页富文本及 AI 对话内容在 Word/WPS/Excel 中排版失真、粘贴繁琐的痛点而设计。它通过常驻系统托盘一键触发机制,自动识别剪贴板内容…

智能体工程化:从OpenClaw协作到ClickHouse运行数据闭环

智能体工程化:从OpenClaw协作到ClickHouse运行数据闭环

2026/9/3 9:46:48

如果把九月初关于 AI 的几个热点放在一起看,会发现一个相当清晰的信号。OpenClaw 2.0 开始谈协作,AI 应用圈开始认真讨论护城河,ClickHouse 这类数据库也开始在智能体基础设施里被反复提起。表面上看,这三件事互不相干&#xff1a…

基于AdaIN的图像风格迁移:从原理到PyTorch实战

基于AdaIN的图像风格迁移:从原理到PyTorch实战

2026/9/3 9:46:48

简介:本资源是一套基于AdaIN(Adaptive Instance Normalization)实现图像风格迁移的完整机器学习实践项目,面向人工智能与计算机视觉方向的学习者、研究者及深度学习初学者,旨在解决内容图像与风格图像融合生成高质量艺…

深度学习红外与可见光图像融合:PyTorch训练与MATLAB部署实战

深度学习红外与可见光图像融合:PyTorch训练与MATLAB部署实战

2026/9/3 9:46:47

简介:本资源是一个基于MATLAB实现的红外与可见光图像融合深度学习项目,面向人工智能、计算机视觉方向的初学者与进阶研究者,解决多模态图像信息互补融合这一典型任务。压缩包共62个文件,含46张PNG/JPG格式的配对红外(I…

AgentScope 2.0:快速搭建权限可控、沙箱隔离并可扩展多智能体的智能体框架实战指南

AgentScope 2.0:快速搭建权限可控、沙箱隔离并可扩展多智能体的智能体框架实战指南

2026/9/3 9:36:47

AgentScope 2.0:快速搭建权限可控、沙箱隔离并可扩展多智能体的智能体框架实战指南 【免费下载链接】agentscope Build and run agents you can see, understand and trust. 项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope AgentScope 2.0 是…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/3 6:39:45

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/3 5:20:28

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…