Python学习笔记4-网络机器人(爬虫)
学习笔记1python学习笔记1-CSDN博客学习笔记2Python学习笔记2-CSDN博客学习笔记3Python学习笔记3-项目实战-AI应用-CSDN博客学习笔记4Python学习笔记4-网络机器人爬虫-CSDN博客学习笔记5python学习笔记5-实战篇-数据分析-CSDN博客一、概述二、入门2.1 入门程序2.1.1 网页结构2.1.2 网页解析2.1.2.1 入门获取表头获取第一行数据获取表格所有数据from lxml import html # 读取网页解析网页 with open(resources/学生成绩.html,r,encodingutf-8) as f: # 读取网页内容 html_doc f.read() # 解析html的文本转换为一个对象 tree html.fromstring(html_doc) # 读取表头 thead_list tree.xpath(//table/thead/tr/th/text()) print(thead_list) # 获取第一行数据 tr_list tree.xpath(//table/tbody/tr[1]/td/text()) print(tr_list) # 获取所有行数据 students tree.xpath(//table/tbody/tr) for stu in students: print(stu.xpath(./td/text()))2.1.2.2 Xpath语法from lxml import html # 读取网页解析网页 with open(resources/学生成绩.html,r,encodingutf-8) as f: # 读取网页内容 html_doc f.read() # 解析html的文本转换为一个对象 tree html.fromstring(html_doc) # / 表示从根节点获取元素 theadlist tree.xpath(/html/body/table/thead/tr/th/text()) print(theadlist) print(------------------------) # // 从任意节点获取元素 thead_list tree.xpath(//table/thead/tr/th/text()) print(thead_list) # [n] 选择第n个元素 tr_list tree.xpath(//table/tbody/tr[3]/td/text()) print(f第三行:{tr_list}) # [last()] 最后一个元素 tr_list tree.xpath(//table/tbody/tr[last()]/td/text()) print(f最后一行:{tr_list}) # 获取所有p标签的文本 p_list tree.xpath(//p/text()) print(fplist:{p_list}) # [attr] 选择有该属性的元素 class_list tree.xpath(//span[class]/text())#选择有class属性的span元素的文本 print(fclass_list:{class_list}) # [sttr‘value’] 选择该属性值为value的元素 highlight_list tree.xpath(//span[classhighlight]/text())#选择class属性值为highlight的span元素的文本 print(fhighlight_list:{highlight_list}) # * 匹配组件下的任何属性 匹配div组件下的任何属性 div classsummary-section div_attr_list tree.xpath(//div/*)# summary-section print(fdiv_attr_list:{div_attr_list}) # * 表示任意元素 p_element_list tree.xpath(//div/p/*/text()) print(fdiv_element_list:{p_element_list}) # div_all_list tree.xpath(//div/*) # print(fdiv_all_list:{div_all_list}) # 获取所有行数据 students tree.xpath(//table/tbody/tr) for stu in students: print(stu.xpath(./td/text()))2.1.2.3 入门程序-网页解析获取页面元素的路径可以F12打开开发者工具选择对应元素后使用如下简单方法获取import requests from lxml import html #目标网址 target_url https://www.tiobe.com/tiobe-index/ # 发送请求获取数据 response requests.get(target_url) # 打印数据到控制台 # print(response.text) document html.fromstring(response.text) # 解析表头 # th_list document.xpath(//table[idtop20]/thead/tr/th/text()) # th_list document.xpath(/html/body/section/div/article/table[1]/thead/tr/th/text()) th_list document.xpath(//*[id\top20\]/thead/tr/th/text()) print(th_list) # 解析表格中的数据 tr_list document.xpath(//table[idtop20]/tbody/tr) for tr in tr_list: print(tr.xpath(./td/text()))三、案例3.1 csv操作# 方式一使用文件基本操作 # with open(csv_data/1.csv,w,encodingutf-8) as f: # f.write(姓名,语文,数学,英语,总分,平均分\n) # f.write(张三,90,80,70,250,83.33\n) # f.write(李四,80,90,80,250,83.33\n) # f.write(王五,70,80,90,250,83.33\n) # f.write(赵六,80,70,80,250,83.33\n) # # with open(csv_data/1.csv,r,encodingutf-8) as f: # for line in f: # print(line.strip()) # 方式二使用csv库 import csv with open(csv_data/2.csv,w,encodingutf-8,newline) as f: # 使用DictWriter创建一个csv文件 writer csv.DictWriter(f,fieldnames[姓名,语文,数学,英语,总分,平均分]) writer.writeheader()#写入表头 # 写入数据行 writer.writerow({姓名:张三,语文:90,数学:80,英语:70,总分:250,平均分:83.33}) writer.writerow({姓名:李四,语文:80,数学:90,英语:80,总分:250,平均分:83.33}) writer.writerow({姓名:王五,语文:70,数学:80,英语:90,总分:250,平均分:83.33}) with open(csv_data/2.csv,r,encodingutf-8) as f: # 使用DictReader创建一个csv文件 reader csv.DictReader(f) for line in reader: print(line)3.2 案例高分电影Top1003.2.1 最初版本1、查看网站robots协议看是否符合爬取规则查看该网站的robots.txt 看我们要抓取的数据是否符合规则2、分析网站数据并获取保存import requests from lxml import html import csv # 请求地址 MOVIEDB_BASE_URL https://www.themoviedb.org TOP100_URLMOVIEDB_BASE_URL/movie/top-rated # 获取电影详情 def get_details(url): response_datarequests.get(url) document html.fromstring(response_data.text) movie_name document.xpath(//*[id\original_header\]/div[2]/section/div[1]/h2/a/text())#电影名称 year document.xpath(//*[id\original_header\]/div[2]/section/div[1]/h2/span/text())#年份 release_date document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[2]/text())#上映时间 type document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[3]/a/text())# 类型 time document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[4]/text())#时长 score document.xpath(//*[id\consensus_pill\]/div/div[1]/div/div/data-percent)#评分 language document.xpath(//*[id\media_v4\]/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text())#语言 director document.xpath(//*[id\original_header\]/div[2]/section/div[3]/ol/li[1]/p[1]/a/text())# 导演 author document.xpath(//*[id\original_header\]/div[2]/section/div[3]/ol/li/p[1]/a/text())# 作者 starring document.xpath(//*[id\cast_scroller\]/ol/li/a/div/img/alt)#主演 slogan document.xpath(//*[id\original_header\]/div[2]/section/div[3]/h3[1]/text())#宣传语 introduction document.xpath(//*[id\original_header\]/div[2]/section/div[3]/div/p/text())#介绍 data { 电影名称:movie_name[0].strip() if movie_name else , 年份:year[0].strip() if year else , 上映时间:release_date[0].strip() if release_date else , 类型:,.join( type) if type else , 时长:time[0].strip() if time else , 评分:score[0].strip() if score else , 语言:language[0].strip() if language else , 导演:director[0].strip() if director else , 作者:,.join( author)if author else , 主演:starring[0].strip() if starring else , 宣传语:slogan[0].strip() if slogan else , 简介:introduction[0].strip() if introduction else , } print(data) return data # 保存数据到csv def save_to_csv(list_data): with open(csv_data/top100.csv,w,encodingutf-8,newline) as f: writer csv.DictWriter(f,fieldnames[电影名称,年份,上映时间,类型,时长,评分,语言,导演,作者,主演,宣传语,简介]) writer.writeheader() writer.writerows(list_data) # 主函数定义核心逻辑 def main(): # 获取高分电影榜单数据 print(开始爬取数据) response_datarequests.get(TOP100_URL) # 解析数据获取电影列表 document html.fromstring(response_data.text) div_list document.xpath(//*[id\page_1\]/div[1]) data_list [] for div in div_list: hrefs div.xpath(./div/div/div/div[2]/div/a/href) for href in hrefs: detail_url MOVIEDB_BASE_URL href # print(f获取电影详情url{detail_url}) data_list.append(get_details(detail_url)) print(数据保存中...) save_to_csv(data_list) print(数据保存完毕) # 测试 if __name__ __main__: main()3.2.2 完善版本加载更多数据刚才的程序只获取了第一页的数据下面完善加载更多按钮获取后面页的数据页面元素分析import requests from lxml import html import csv # 增加加载更多的请求获取到top100的数据 # 请求地址 MOVIEDB_BASE_URL https://www.themoviedb.org TOP100_URLMOVIEDB_BASE_URL/movie/top-rated #第一页的访问地址 GET请求 TOP100_URL_2MOVIEDB_BASE_URL/discover/movie/items #加载更多的访问地址 POST请求 # 获取电影详情 def get_details(url): response_datarequests.get(url) document html.fromstring(response_data.text) movie_name document.xpath(//*[id\original_header\]/div[2]/section/div[1]/h2/a/text())#电影名称 year document.xpath(//*[id\original_header\]/div[2]/section/div[1]/h2/span/text())#年份 release_date document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[2]/text())#上映时间 type document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[3]/a/text())# 类型 time document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[4]/text())#时长 score document.xpath(//*[id\consensus_pill\]/div/div[1]/div/div/data-percent)#评分 language document.xpath(//*[id\media_v4\]/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text())#语言 director document.xpath(//*[id\original_header\]/div[2]/section/div[3]/ol/li[1]/p[1]/a/text())# 导演 author document.xpath(//*[id\original_header\]/div[2]/section/div[3]/ol/li/p[1]/a/text())# 作者 starring document.xpath(//*[id\cast_scroller\]/ol/li/a/div/img/alt)#主演 slogan document.xpath(//*[id\original_header\]/div[2]/section/div[3]/h3[1]/text())#宣传语 introduction document.xpath(//*[id\original_header\]/div[2]/section/div[3]/div/p/text())#介绍 data { 电影名称:movie_name[0].strip() if movie_name else , 年份:year[0].strip() if year else , 上映时间:release_date[0].strip() if release_date else , 类型:,.join( type) if type else , 时长:time[0].strip() if time else , 评分:score[0].strip() if score else , 语言:language[0].strip() if language else , 导演:director[0].strip() if director else , 作者:,.join( author)if author else , 主演:starring[0].strip() if starring else , 宣传语:slogan[0].strip() if slogan else , 简介:introduction[0].strip() if introduction else , } # print(data) return data # 保存数据到csv def save_to_csv(list_data): with open(csv_data/top100.csv,w,encodingutf-8,newline) as f: writer csv.DictWriter(f,fieldnames[电影名称,年份,上映时间,类型,时长,评分,语言,导演,作者,主演,宣传语,简介]) writer.writeheader() writer.writerows(list_data) # 主函数定义核心逻辑 def main(): data_list [] #爬取数据结果 # 循环获取电影列表 for i in range(1,6): print(f开始爬取第{i}页数据) if i1: response_data requests.get(TOP100_URL) else: response_data requests.post(TOP100_URL_2,fair_date.gteair_date.ltecertificationcertification_countryCNdebugfirst_air_date.gtefirst_air_date.lteinclude_adultfalseinclude_softcorefalselatest_ceremony.gtelatest_ceremony.ltepage{i}primary_release_date.gteprimary_release_date.lteregionrelease_date.gterelease_date.lte2026-12-14show_meeverythingsort_byvote_average.descvote_average.gte0vote_average.lte10vote_count.gte300watch_regionCNwith_genreswith_keywordswith_networkswith_origin_countrywith_original_languagewith_watch_monetization_typeswith_watch_providerswith_release_typewith_runtime.gte0with_runtime.lte400) # 解析数据获取电影列表 document html.fromstring(response_data.text) div_list document.xpath(//*[id\media-list\]/*/div/div[class\media-list-results contents\]) # 获取电影详情 for div in div_list: hrefs div.xpath(./div/div/div/a/href) for href in hrefs: detail_url MOVIEDB_BASE_URL href print(f获取电影详情url{detail_url}) data_list.append(get_details(detail_url)) print(数据保存中...) save_to_csv(data_list) print(数据保存完毕) # 测试 if __name__ __main__: main()3.3.数据清洗3.3.1 正则入门3.3.2 正则表达式3.3.3 数据清洗-程序优化import requests from lxml import html import csv import re from streamlit.components.v1 import iframe # 增加加载更多的请求获取到top100的数据 # 请求地址 MOVIEDB_BASE_URL https://www.themoviedb.org TOP100_URLMOVIEDB_BASE_URL/movie/top-rated #第一页的访问地址 GET请求 TOP100_URL_2MOVIEDB_BASE_URL/discover/movie/items #加载更多的访问地址 POST请求 # 获取电影年份 def get_movie_year(year): year year[0].strip() if year else return re.findall(r\d{4},year)[0] # 获取电影上映时间 def get_movie_release_date(release_date): release_date release_date[0].strip() if release_date else return re.match(r\d{4}-\d{2}-\d{2},release_date).group() # 获取电影时长 def get_movie_time(time): time time[0].strip() if time else hours re.search(r(\d*)h,time) total_minites int(hours.group(1)) * 60 if hours else 0 minitues re.search(r(\d*)m, time) total_minites int(minitues.group(1)) if minitues else 0 return total_minites # 获取电影详情 def get_details(url): response_datarequests.get(url) document html.fromstring(response_data.text) movie_name document.xpath(//*[id\original_header\]/div[2]/section/div[1]/h2/a/text())#电影名称 year document.xpath(//*[id\original_header\]/div[2]/section/div[1]/h2/span/text())#年份 # 修改获取元素的xpath修复某些数据获取不到的问题 # release_date document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[2]/text())#上映时间 # type document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[3]/a/text())# 类型 # time document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[4]/text())#时长 release_date document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[class\release\]/text())#上映时间 type document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[class\genres\]/a/text())# 类型 time document.xpath(//*[id\original_header\]/div[2]/section/div[1]/div/span[class\runtime\]/text())#时长 score document.xpath(//*[id\consensus_pill\]/div/div[1]/div/div/data-percent)#评分 language document.xpath(//*[id\media_v4\]/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text())#语言 director document.xpath(//*[id\original_header\]/div[2]/section/div[3]/ol/li[1]/p[1]/a/text())# 导演 author document.xpath(//*[id\original_header\]/div[2]/section/div[3]/ol/li/p[1]/a/text())# 作者 starring document.xpath(//*[id\cast_scroller\]/ol/li/a/div/img/alt)#主演 slogan document.xpath(//*[id\original_header\]/div[2]/section/div[3]/h3[1]/text())#宣传语 introduction document.xpath(//*[id\original_header\]/div[2]/section/div[3]/div/p/text())#介绍 data { 电影名称:movie_name[0].strip() if movie_name else , 年份:get_movie_year(year), 上映时间:get_movie_release_date(release_date), 类型:,.join( type) if type else , 时长:get_movie_time(time), 评分:score[0].strip() if score else , 语言:language[0].strip() if language else , 导演:director[0].strip() if director else , 作者:,.join( author)if author else , 主演:starring[0].strip() if starring else , 宣传语:slogan[0].strip() if slogan else , 简介:introduction[0].strip() if introduction else , } # print(data) return data # 保存数据到csv def save_to_csv(list_data): with open(csv_data/top100-1.csv,w,encodingutf-8,newline) as f: writer csv.DictWriter(f,fieldnames[电影名称,年份,上映时间,类型,时长,评分,语言,导演,作者,主演,宣传语,简介]) writer.writeheader() writer.writerows(list_data) # 主函数定义核心逻辑 def main(): data_list [] #爬取数据结果 # 循环获取电影列表 for i in range(1,6): print(f开始爬取第{i}页数据) if i1: response_data requests.get(TOP100_URL) else: response_data requests.post(TOP100_URL_2,fair_date.gteair_date.ltecertificationcertification_countryCNdebugfirst_air_date.gtefirst_air_date.lteinclude_adultfalseinclude_softcorefalselatest_ceremony.gtelatest_ceremony.ltepage{i}primary_release_date.gteprimary_release_date.lteregionrelease_date.gterelease_date.lte2026-12-14show_meeverythingsort_byvote_average.descvote_average.gte0vote_average.lte10vote_count.gte300watch_regionCNwith_genreswith_keywordswith_networkswith_origin_countrywith_original_languagewith_watch_monetization_typeswith_watch_providerswith_release_typewith_runtime.gte0with_runtime.lte400) # 解析数据获取电影列表 document html.fromstring(response_data.text) div_list document.xpath(//*[id\media-list\]/*/div/div[class\media-list-results contents\]) # 获取电影详情 for div in div_list: hrefs div.xpath(./div/div/div/a/href) for href in hrefs: detail_url MOVIEDB_BASE_URL href print(f获取电影详情url{detail_url}) data_list.append(get_details(detail_url)) print(数据保存中...) save_to_csv(data_list) print(数据保存完毕) # 测试 if __name__ __main__: main()优化前后的数据分别如下

相关新闻

CodeGraph:低成本代码智能导航工具,替代AI编程高Token消耗

CodeGraph:低成本代码智能导航工具,替代AI编程高Token消耗

最近在开发者圈子里,一个高频的讨论是: “用 AI 编程工具写代码,Token 消耗太快,成本有点扛不住了。” 如果你也用过 VibeCoding 这类基于大模型的代码生成工具,大概率对“Token 耗尽”的弹窗和随之而来的账单感到焦…

2026/8/5 13:06:51 阅读更多 →
软件定义无线电(SDR)原理、硬件选型与实战应用全解析

软件定义无线电(SDR)原理、硬件选型与实战应用全解析

1. 项目概述:从“黑盒子”到“软件定义”的无线电革命 如果你对无线电的印象还停留在需要拧动旋钮、连接一堆笨重线缆的“黑盒子”设备,那么软件定义无线电(Software-Defined Radio, SDR)可能会彻底颠覆你的认知。简单来说&#x…

2026/8/5 13:06:51 阅读更多 →
Angular开发环境配置与VS Code高效工作流实践指南

Angular开发环境配置与VS Code高效工作流实践指南

你有没有过这样的经历:刚接触 Angular 时,面对一个全新的项目结构,感觉像走进了一个精心设计但略显复杂的迷宫?你知道那些文件都有用,但不知道从哪里开始改起,也不知道如何高效地调试和运行。这时候&#x…

2026/8/5 13:06:51 阅读更多 →

最新新闻

【扣子消息触发器高阶实战指南】:20年架构师亲授5大避坑法则与3种生产级配置模板

【扣子消息触发器高阶实战指南】:20年架构师亲授5大避坑法则与3种生产级配置模板

更多请点击: https://codechina.net 第一章:扣子消息触发器的核心原理与架构定位 扣子(Coze)平台中的消息触发器是连接 Bot 行为与外部事件的关键枢纽,其本质是一个轻量级、高内聚的事件监听与分发组件。它不直接处理…

2026/8/5 13:44:07 阅读更多 →
3个Windows系统维护难题,Dism++都能轻松解决

3个Windows系统维护难题,Dism++都能轻松解决

3个Windows系统维护难题,Dism都能轻松解决 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是不是经常遇到C盘空间不足的烦恼?Windows更…

2026/8/5 13:44:07 阅读更多 →
C/C++实现贪吃蛇游戏的核心技术与优化策略

C/C++实现贪吃蛇游戏的核心技术与优化策略

1. 为什么选择C/C实现贪吃蛇?贪吃蛇作为经典游戏,用C/C实现具有特殊意义。这两种语言在游戏开发领域有着不可替代的优势:直接内存操作带来的性能优势、对硬件资源的精细控制能力,以及跨平台的编译特性。我在大学时期完成的第一个完…

2026/8/5 13:44:07 阅读更多 →
终极指南:2条命令在Linux上快速安装QQ微信的深度兼容方案

终极指南:2条命令在Linux上快速安装QQ微信的深度兼容方案

终极指南:2条命令在Linux上快速安装QQ微信的深度兼容方案 【免费下载链接】deepin-wine 【deepin源移植】Debian/Ubuntu上的QQ/微信快速安装方式 项目地址: https://gitcode.com/gh_mirrors/de/deepin-wine 想在Linux系统上使用QQ、微信等常用国产软件&#…

2026/8/5 13:44:07 阅读更多 →
C++系统编程实践:从进程管理到网络通信的技术原理与安全防御

C++系统编程实践:从进程管理到网络通信的技术原理与安全防御

1. 项目概述:从“玩具”到“武器”的认知跨越 “手动编写木马”——这个标题听起来像是一个技术爱好者的挑战,或者一个安全初学者的危险尝试。但今天,我想从一个完全不同的角度来聊聊这件事:把它当作一次对计算机系统底层交互、网…

2026/8/5 13:44:06 阅读更多 →
AI驱动社群增长的底层逻辑(2024最新算法框架+真实ROI数据验证)

AI驱动社群增长的底层逻辑(2024最新算法框架+真实ROI数据验证)

更多请点击: https://intelliparadigm.com 第一章:AI驱动社群增长的底层逻辑(2024最新算法框架真实ROI数据验证) AI驱动社群增长的本质,是将用户行为信号、内容语义与社交图谱进行多模态联合建模,并通过实…

2026/8/5 13:43:06 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/8/4 13:38:40 阅读更多 →