Python爬虫实战:从小说网站抓取数据的技术解析与实现
1. 从“想看看”到“动手爬”一个Python爬虫的起点最近想重温一本老小说结果发现常去的几个在线网站要么广告满天飞要么排版错乱阅读体验极差。一气之下就动了把小说内容“搬”到本地的念头。这大概是很多Python爬虫学习者的共同起点从一个具体的、微小的需求出发比如爬取一部小说、一份榜单或者一套图片。今天要聊的就是如何用Python爬虫从“笔趣阁”这类小说网站注本文仅以技术学习为目的探讨公开可访问的网页内容获取方法请务必尊重版权仅用于个人学习研究爬取一部小说的部分章节。这个过程看似简单但里面涉及的请求处理、HTML解析、数据清洗和异常处理恰恰是爬虫技术的核心骨架。无论你是刚入门的新手还是想巩固基础的老手跟着走一遍这个流程都能有不少收获。2. 目标分析与环境搭建明确边界备好工具在动手写代码之前我们必须先想清楚两件事我们要什么以及网站给了我们什么。盲目地开始写爬虫很容易陷入数据混乱、频繁被封的窘境。2.1 目标网站结构与内容分析我们以“笔趣阁”风格的某个小说阅读站为例具体域名因合规要求不在此列出读者可自行寻找类似的、结构清晰的公开网站进行练习。我们的目标是爬取一部指定小说的前N个章节。首先手动访问该网站找到目标小说。观察其URL结构通常小说主页的URL会包含书籍ID例如https://www.xxx.com/book/12345/。打开这个页面我们需要找到两个关键信息章节列表通常在一个div或ul列表中每个章节对应一个a链接链接的href属性是章节的相对路径如/book/12345/1.html链接文本是章节标题。章节正文内容点击任意章节链接进入后正文内容通常包裹在一个具有特定id或class的div标签内比如div idcontent或div classcontent。使用浏览器的“开发者工具”F12是分析这些结构的必备技能。在“元素”Elements面板我们可以清晰地看到整个页面的HTML DOM树通过鼠标悬停和点击可以精准定位到章节列表和正文内容所在的HTML标签及其属性。2.2 开发环境与库的选择工欲善其事必先利其器。对于这样一个任务我们只需要最基础但强大的几个库Requests用于发送HTTP请求获取网页的HTML源代码。它比Python内置的urllib更简洁易用。BeautifulSoup4 (bs4)用于解析HTML/XML文档从复杂的标签树中轻松提取我们需要的数据。它提供了类似jQuery的选择器非常直观。lxml一个高性能的HTML/XML解析器。BeautifulSoup可以指定使用lxml作为解析后端速度比Python内置的html.parser快很多。安装命令非常简单pip install requests beautifulsoup4 lxml选择这些库的理由很充分Requests处理网络请求稳定可靠BeautifulSoup的find和select方法让数据提取代码可读性极高而lxml解析器能显著提升处理速度尤其是当页面结构复杂时。对于新手我不建议一开始就上Scrapy这样的大型框架用这几个库把基础流程摸透理解HTTP请求-响应、HTML解析、数据存储的每一个环节对未来应对更复杂的爬虫任务有莫大好处。3. 核心爬取流程拆解从列表到内容的完整链路爬虫程序的核心逻辑是一个清晰的流水线获取列表 - 解析链接 - 遍历抓取 - 保存数据。我们一步步来实现。3.1 第一步获取并解析小说章节列表首先我们需要拿到小说所有章节的链接和标题。这里会涉及第一个关键点请求头Headers的模拟。一个裸的requests.get()请求很容易被网站识别为爬虫并被拒绝。因此我们需要在请求中带上常见的浏览器请求头其中User-Agent是最基本的。import requests from bs4 import BeautifulSoup def get_chapter_list(book_url): 获取小说章节列表链接和标题 :param book_url: 小说主页URL :return: 包含(章节链接, 章节标题)的列表 headers { 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 } try: response requests.get(book_url, headersheaders) response.raise_for_status() # 如果状态码不是200抛出HTTPError异常 response.encoding response.apparent_encoding # 自动识别编码避免乱码 except requests.RequestException as e: print(f请求小说主页失败: {e}) return [] soup BeautifulSoup(response.text, lxml) # 关键步骤找到章节列表所在的HTML元素。 # 这里需要根据实际网站结构调整选择器。 # 假设章节列表在一个id为list的div下的所有a标签中 chapter_list_div soup.find(div, idlist) if not chapter_list_div: # 如果id不是list尝试用class或其他属性 chapter_list_div soup.find(div, class_listmain) # 如果还找不到可能需要更复杂的选择器这里需要你根据实际情况调整 print(未找到章节列表容器请检查网页结构或选择器。) return [] # 找到该div下所有的a标签章节链接 chapter_links chapter_list_div.find_all(a) chapters [] base_url /.join(book_url.split(/)[:-1]) # 获取基础URL用于拼接相对链接 for link in chapter_links: href link.get(href) title link.text.strip() # 过滤掉可能不是章节的链接比如网站导航链接 if href and title and (html in href or chapter in href): # 处理相对链接拼接成完整URL if href.startswith(/): # 如果是根路径相对链接需要拼接网站域名这里简化处理实际情况可能更复杂 full_url https://www.xxx.com href # 请替换为实际域名 elif not href.startswith(http): # 如果是相对路径拼接基础URL full_url base_url / href.lstrip(/) else: full_url href chapters.append((full_url, title)) return chapters注意base_url的拼接逻辑是爬虫中最容易出错的地方之一。不同的网站链接风格迥异有绝对路径http://...、根相对路径/book/...和相对路径1.html。上述代码提供了一个基础的拼接逻辑但实际应用中必须根据目标网站的具体情况仔细调试。一个更稳健的方法是直接使用urllib.parse.urljoin(base_url, href)来进行URL拼接。3.2 第二步抓取单个章节的正文内容拿到章节链接后我们就可以逐个访问并提取正文了。这一步的难点在于精准定位正文所在标签并清洗掉无关内容如广告、脚本、多余的空格和换行符。def get_chapter_content(chapter_url, headers): 获取单个章节的正文内容 :param chapter_url: 章节完整URL :param headers: 请求头 :return: 清洗后的章节正文文本 try: resp requests.get(chapter_url, headersheaders) resp.raise_for_status() resp.encoding resp.apparent_encoding except requests.RequestException as e: print(f请求章节失败 {chapter_url}: {e}) return None soup BeautifulSoup(resp.text, lxml) # 关键步骤找到正文内容所在的HTML元素。 # 常见的选择器有id如#content或class如.content。 content_div soup.find(div, idcontent) if not content_div: content_div soup.find(div, class_content) # 如果还找不到可能需要打印soup看看结构或者用更通用的选择器如soup.select(div.content p) if not content_div: print(f未找到正文内容URL: {chapter_url}) return None # 提取文本并清洗 content_text content_div.get_text(separator\n, stripTrue) # 进一步清洗移除常见的网站附加文字如“笔趣阁”、“手机阅读”等 lines content_text.split(\n) cleaned_lines [line.strip() for line in lines if line.strip() and not any(ad in line for ad in [笔趣阁, www., 手机阅读, 记住网址])] cleaned_content \n.join(cleaned_lines) return cleaned_content实操心得get_text()方法配合separator参数可以很好地保留段落结构。清洗规则cleaned_lines那部分需要你观察多个章节页面后总结出规律。有些网站会在正文中插入固定的广告词这些就是需要过滤的关键字。不要指望一个规则通吃所有网站针对不同站点定制清洗逻辑是必须的。3.3 第三步控制爬取范围与速率我们可能只想爬取前20章作为测试或者分批爬取。同时为了避免对服务器造成过大压力或触发反爬机制设置爬取间隔延时是基本礼仪。import time def crawl_novels_partial(book_url, max_chapters20, delay1): 爬取小说部分章节 :param book_url: 小说主页URL :param max_chapters: 最大爬取章节数 :param delay: 请求间隔时间秒 headers {User-Agent: Mozilla/5.0...} # 同上 chapters get_chapter_list(book_url) if not chapters: print(未获取到章节列表程序退出。) return print(f共发现 {len(chapters)} 个章节准备爬取前 {min(max_chapters, len(chapters))} 章。) all_content [] for i, (url, title) in enumerate(chapters[:max_chapters]): print(f正在爬取第 {i1} 章: {title}) content get_chapter_content(url, headers) if content: # 将标题和内容组合并添加分页符 chapter_with_title f\n\n{*30}\n第{i1}章{title}\n{*30}\n\n{content} all_content.append(chapter_with_title) else: all_content.append(f\n\n{*30}\n第{i1}章{title} [爬取失败]\n{*30}\n) time.sleep(delay) # 重要每次请求后暂停避免请求过快 # 保存到文件 if all_content: with open(novel_partial.txt, w, encodingutf-8) as f: f.writelines(all_content) print(f爬取完成内容已保存至 novel_partial.txt)这里的delay参数至关重要。即使网站没有明显的反爬快速连续的请求也可能被临时屏蔽。对于个人学习用途设置1-3秒的间隔是合理且友好的。enumerate和切片chapters[:max_chapters]让我们能方便地控制爬取的数量和进度。4. 反爬虫策略的应对与代码健壮性提升真实的网站不会像练习靶场一样敞开大门。随着爬取进行你可能会遇到403禁止访问、请求超时、IP被封等问题。这就需要我们提升代码的健壮性并考虑一些基本的反反爬策略。4.1 异常处理与重试机制网络请求充满不确定性完善的异常处理是生产级爬虫的基石。def robust_request(url, headers, retries3, timeout5): 一个带重试和超时机制的请求函数 for attempt in range(retries): try: resp requests.get(url, headersheaders, timeouttimeout) resp.raise_for_status() resp.encoding resp.apparent_encoding return resp except (requests.exceptions.Timeout, requests.exceptions.ConnectionError) as e: print(f请求超时或连接错误 ({url})第{attempt1}次重试... 错误: {e}) time.sleep(2 * attempt) # 重试等待时间递增 except requests.exceptions.HTTPError as e: if resp.status_code 403: print(f访问被拒绝(403)可能触发了反爬虫。URL: {url}) # 这里可以尝试更换User-Agent或暂停更长时间 return None else: print(fHTTP错误 {resp.status_code}: {e}) return None print(f请求失败已重试{retries}次: {url}) return None将这个函数替换掉之前简单的requests.get()调用能显著提升程序在弱网络环境或遇到临时故障时的稳定性。timeout参数防止程序永远卡住retries和递增的等待时间给了程序自我恢复的机会。4.2 应对基础反爬User-Agent池与简单代理如果只是单个IP、单个User-Agent频繁请求被封是迟早的事。User-Agent池准备一个列表每次请求随机选择一个模拟不同浏览器和设备。import random user_agents [ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..., Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 ..., Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ..., ] headers {User-Agent: random.choice(user_agents)}使用代理IP当IP被封后更换代理IP是直接有效的办法。可以使用一些免费的代理IP提供商注意稳定性和安全性或者使用付费的代理服务。集成方式如下proxies { http: http://your_proxy_ip:port, https: http://your_proxy_ip:port, } response requests.get(url, headersheaders, proxiesproxies, timeout10)重要提醒免费代理IP大多不稳定且速度慢仅适用于学习测试。商用或大规模爬取务必使用可靠的代理服务。同时务必严格遵守网站的robots.txt协议并控制爬取速度和频率体现技术人的素养。4.3 数据存储的优化从TXT到结构化存储将小说保存为txt文件简单直观但如果想管理多本书、记录爬取状态、或者进行更复杂的处理就需要更结构化的存储。JSON文件适合存储章节列表、元信息等。import json book_info { title: 小说名, author: 作者, chapters: [] # 里面存放每个章节的标题、URL、内容 } # 爬取过程中填充book_info[chapters] with open(novel.json, w, encodingutf-8) as f: json.dump(book_info, f, ensure_asciiFalse, indent2)SQLite数据库轻量级数据库无需安装服务器。可以创建books和chapters两张表关联存储方便查询和续爬。import sqlite3 conn sqlite3.connect(novels.db) c conn.cursor() # 创建表 c.execute(CREATE TABLE IF NOT EXISTS chapters (id INTEGER PRIMARY KEY, book_id INTEGER, title TEXT, url TEXT UNIQUE, content TEXT)) # 插入数据 c.execute(INSERT OR IGNORE INTO chapters (title, url, content) VALUES (?, ?, ?), (chapter_title, chapter_url, content)) conn.commit() conn.close()使用数据库的最大好处是可以通过url的唯一约束避免重复爬取并且可以轻松实现“断点续爬”——记录上次爬到的章节ID下次从它之后开始即可。5. 项目复盘与进阶思考完成一个基础的爬虫项目后停下来复盘和思考比盲目开始下一个项目更重要。5.1 本次爬虫项目的关键点回顾分析先行70%的爬虫工作在于分析网页结构、寻找数据规律、识别反爬措施。写代码只是最后一步。健壮性网络请求必须包含超时、重试和异常处理。解析数据时要预防标签找不到的情况使用if判断。遵守规则设置请求间隔、使用合理的User-Agent、尊重robots.txt这是可持续爬取的前提。数据清洗从HTML中提取的文本往往包含多余空格、换行、广告文本。精细的清洗逻辑直接影响最终数据的质量。可维护性将获取列表、获取内容、保存数据等逻辑封装成函数使代码清晰、易于调试和复用。5.2 遇到的典型问题与解决方案乱码问题除了使用response.apparent_encoding有时需要手动指定response.encoding gbk或utf-8具体看网页源码中的meta charset标签。动态加载内容如果章节列表或正文是通过JavaScript异步加载的用requests直接拿到的HTML里就没有这些数据。这时需要分析网络请求找到真正的数据接口通常是XHR请求或者使用Selenium、Playwright这类浏览器自动化工具来模拟用户操作获取渲染后的页面。访问频率限制如果遇到429Too Many Requests状态码说明爬得太快了。除了增加delay还可以考虑在请求被拒后采用指数退避算法等待更长时间。5.3 从“部分爬取”到“完整项目”的扩展思路如果学有余力可以尝试以下扩展把这个小练习变成一个更完整的项目图形化界面GUI使用Tkinter或PyQt做一个简单界面输入小说主页URL和爬取章节数点击按钮开始并显示进度条。批量爬取与调度编写一个脚本从一个榜单页面读取多本小说的链接然后依次调度爬虫去爬取并将每本小说存到单独的文件夹或数据库表中。内容格式化与导出将爬取的内容自动格式化为更美观的EPUB或PDF电子书格式可以使用ebooklib等库。部署与自动化将爬虫脚本部署到服务器设置定时任务如每天凌晨自动爬取追更小说的最新章节并通过邮件或Telegram Bot推送给你。爬虫技术是一把双刃剑它强大的数据获取能力背后是相应的法律责任和道德约束。在学习过程中请始终将技术用于正当的、合法的场景比如爬取公开的、允许爬取的数据进行个人学习、数据分析或科研。尊重网站的劳动成果遵守其服务条款这样才能在技术的道路上走得更远、更稳。

相关新闻

Nginx proxy_pass 配置与优化实战指南

Nginx proxy_pass 配置与优化实战指南

1. Nginx proxy_pass 核心机制解析 作为现代Web架构中的瑞士军刀,Nginx的proxy_pass指令承载着流量转发的核心使命。当我在生产环境第一次配置反向代理时,这个看似简单的指令背后隐藏着诸多技术细节。proxy_pass本质上建立了一条从客户端到后端服务的透明…

2026/8/13 8:10:39 阅读更多 →
长远目标与眼前行动,如何双赢? “上山、砍柴、做饭”=累的时候专注眼前,轻松时候看的长远

长远目标与眼前行动,如何双赢? “上山、砍柴、做饭”=累的时候专注眼前,轻松时候看的长远

选长远目标还是专注眼前 目录 选长远目标还是专注眼前 一、为什么必须有长远目标?——帮你找对“山” 二、为什么必须专注眼前?——把柴“一刀刀砍下来” 把长远目标和专注眼前结合起来 1. 定长远目标:抓核心,不纠结细节 2. 拆到当日动作:把大目标“降维”成小事 3. 固定…

2026/8/13 8:09:39 阅读更多 →
软件设计师自学备考全攻略:三轮复习法与核心考点突破

软件设计师自学备考全攻略:三轮复习法与核心考点突破

1. 项目概述:为什么选择自学软件设计师? 软件设计师,作为软考(计算机技术与软件专业技术资格水平考试)中级资格里最经典、最“硬核”的一个方向,一直是很多技术人职业晋升路上的关键一步。它不像高级的系统…

2026/8/13 8:09:39 阅读更多 →

最新新闻

新手小白学习计算机的第八天(老王专场)

新手小白学习计算机的第八天(老王专场)

循环编程练习 本文章记录了老王今日关于循环编程的练习 #define _CRT_SECURE_NO_WARNINGS //#include<stdio.h> //int main() //{ // //int v 0; // double v 0; // for (v 36; v > 0; v / 2.0) // printf("%3d", v); // //printf("%.0f"…

2026/8/13 9:04:59 阅读更多 →
LangChain.js会话消息流:从Message对象到多用户对话系统实战

LangChain.js会话消息流:从Message对象到多用户对话系统实战

1. 从零到一&#xff1a;理解LangChain.js中的会话消息流如果你已经跟着上一篇内容&#xff0c;用LangChain.js搭建了一个能跑起来的问答应用&#xff0c;那么恭喜你&#xff0c;你已经迈出了第一步。但很快你就会发现&#xff0c;那个简单的问答模型&#xff0c;就像一个只会回…

2026/8/13 9:04:59 阅读更多 →
林伽一 · AI科技日报 | 2026年08月12日

林伽一 · AI科技日报 | 2026年08月12日

OpenAI 首次将 Astra 指定为"关键"网络安全能力AI&#xff0c;并披露训练智能体曾通过多智能体通信自主攻击自家基础设施&#xff0c;安全治理正从"外部攻防"转向"内部自主行为管控"[①][②]。同日&#xff0c;Meta 以30B参数开源模型 Muse Glim…

2026/8/13 9:04:59 阅读更多 →
交通标志数据集 识别交通道路中的警告,禁止性,强制性交通标识

交通标志数据集 识别交通道路中的警告,禁止性,强制性交通标识

使用 Python 深度学习 YOLOv8训练 CCTSDB 交通标志数据集 识别交通道路中的警告&#xff0c;禁止性&#xff0c;强制性交通标识 文章目录使用 Python 深度学习 YOLOv8训练 CCTSDB 交通标志数据集 识别交通道路中的警告&#xff0c;禁止性&#xff0c;强制性交通标识**1. 安装依…

2026/8/13 9:04:59 阅读更多 →
滚动轴承故障检测 基于双路神经网络滚动轴承故障诊断系统 系统融合原始振动信号和二维时频图像进行多输入(多通道)故障诊断。PyTorch框架实现模型,可单双路

滚动轴承故障检测 基于双路神经网络滚动轴承故障诊断系统 系统融合原始振动信号和二维时频图像进行多输入(多通道)故障诊断。PyTorch框架实现模型,可单双路

基于双路神经网络的滚动轴承故障诊断 文章目录基于双路神经网络的滚动轴承故障诊断文字及内容代码仅供参考&#xff01;1. 数据准备2. 完整代码实现2.1 数据加载和预处理2.2 模型构建2.3 模型训练2.4 结果可视化运行步骤实际运行情况如图 融合了原始振动信号 和 二维信号时频图…

2026/8/13 9:04:59 阅读更多 →
结构方程模型参数解读:从基础到进阶实践

结构方程模型参数解读:从基础到进阶实践

1. 结构方程模型参数解读基础 结构方程模型&#xff08;SEM&#xff09;作为多元统计分析的重要工具&#xff0c;其参数解释能力直接决定了研究结论的可靠性。初次接触SEM的研究者常会陷入"跑出模型就万事大吉"的误区&#xff0c;实际上参数解读才是真正考验研究者功…

2026/8/13 9:03:58 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者&#xff0c;或者正准备踏入这个领域&#xff0c;那么Visual Studio&#xff08;后面简称VS&#xff09;绝对是你绕不开的伙伴。但有时候&#xff0c;这个伙伴会跟你开一个不大不小的玩笑&#xff1a;你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南&#xff1a;RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑&#xff1a;baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码&#xff08;维护中 rm repo&#xff09; 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片&#xff1a;Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身&#xff0c;而应重视模型外的系统搭建&#xff0c;即Harness。提出AgentModelHarness的实用公式&#xff0c;详细介绍Harness的四个层次&#xff1a;持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →