Python+Selenium实战:猫眼电影历年数据采集与反爬策略详解
1. 项目缘起与核心价值最近在做一个电影市场趋势分析的小项目需要用到猫眼电影上历年来的票房、评分、演员阵容等数据。一开始想着直接找现成的数据集但要么数据不全要么年份不够新要么字段不是我想要的。折腾了一圈发现还是自己动手丰衣足食最靠谱。于是一个基于 Python 和 Selenium 的“猫眼电影各年份数据采集”脚本就提上了日程。这活儿听起来简单不就是打开网页、点点按钮、把数据存下来嘛但真做起来从环境搭建到反爬应对再到数据清洗每一步都有不少门道。今天我就把自己从零开始完整实现这套采集流程的经验、踩过的坑以及最终的优化方案毫无保留地分享出来。无论你是想学习 Python 网络爬虫、Selenium 自动化还是单纯需要一份结构化的电影数据这篇文章都能给你提供一条清晰、可复现的路径。这个项目的核心价值在于它不仅仅是一个“能跑通”的脚本更是一套应对现代动态网页数据采集的实战方法论。猫眼电影的页面结构复杂数据加载方式多样有直接渲染的有异步加载的还伴随着一些基础的反爬机制。通过这个项目你将掌握如何用 Selenium 模拟真实用户操作如何定位动态加载的元素如何处理翻页和年份筛选以及如何将采集到的半结构化数据整理成干净、可分析的表格。整个过程我会穿插着解释“为什么这么做”而不仅仅是“怎么做”让你知其然更知其所以然。2. 环境搭建与工具选型为什么是 Python Selenium Chrome工欲善其事必先利其器。在开始写代码之前我们需要把“厨房”收拾好。对于网页数据采集尤其是像猫眼电影这样交互复杂的站点工具链的选择直接决定了开发效率和脚本的稳定性。2.1 编程语言为什么选择 PythonPython 几乎是数据采集和自动化领域的“标准答案”。其生态库极其丰富语法简洁社区活跃。对于本项目而言几个核心优势非常突出丰富的网络库除了我们将要深入使用的selenium还有requests、aiohttp等能应对从简单静态页到复杂动态页的各种场景。后续如果发现某些数据接口是直接的 API用requests会更快。强大的数据处理能力采集到的数据最终要用pandas进行清洗、分析和存储Python 在这方面有天然优势。json、csv等模块也使得数据序列化非常方便。跨平台与易部署脚本写好后在 Windows、macOS 或 Linux 服务器上都能运行便于后期定时任务或云服务器部署。注意请确保你安装的是 Python 3.8 或更高版本。许多现代库对 Python 3.6 及以下版本的支持已逐渐停止。安装时务必勾选“Add Python to PATH”这是后续很多环境问题的根源。2.2 浏览器自动化为什么是 Selenium面对猫眼电影你可能会问为什么不用更轻量的requests直接抓取接口答案是猫眼的很多页面数据特别是涉及年份筛选、滚动加载的列表页其数据很可能是在浏览器端通过 JavaScript 动态渲染的单纯的 HTTP 请求拿不到完整的 HTML。Selenium 的核心价值在于它能驱动一个真实的浏览器如 Chrome完整地执行页面上的 JavaScript等所有元素都加载、渲染完毕后我们再从中提取数据。这就相当于一个“看得见、摸得着”的机器人在帮你操作浏览器。2.3 浏览器驱动ChromeDriver 的版本匹配陷阱这是新手踩坑的重灾区。Selenium 需要通过一个叫ChromeDriver的组件来控制和通信。你必须保证你电脑上安装的 Chrome 浏览器版本与下载的ChromeDriver版本高度兼容。通常大版本号需要一致或接近。查看 Chrome 版本打开 Chrome 浏览器在地址栏输入chrome://settings/help回车即可看到版本号例如109.0.5414.120。下载对应驱动前往 ChromeDriver 官方下载站或国内镜像站下载与你的 Chrome 大版本号如109匹配的ChromeDriver。下载后将可执行文件如chromedriver.exe或chromedriver放在一个你记得住的目录或者直接放到 Python 的安装目录下这样系统 PATH 通常能识别或者更推荐的做法是在代码中指定其路径。2.4 依赖库安装一步到位打开你的命令行终端CMD、PowerShell 或 Terminal执行以下命令来安装必要的 Python 库。建议使用虚拟环境venv来管理项目依赖避免污染全局环境。pip install selenium pandas openpyxlselenium: 浏览器自动化核心库。pandas: 数据处理与分析神器我们将用它来把数据整理成 DataFrame 并保存为 Excel 或 CSV。openpyxl: 为了让pandas能输出.xlsx格式的 Excel 文件需要这个引擎。环境至此就准备妥当了。接下来我们将进入实战环节从打开第一个页面开始。3. 核心采集策略与页面结构分析在动手写代码之前我们必须像侦探一样先对目标网站——猫眼电影的榜单页面——进行一番侦察。盲目地开始写定位代码只会事倍功半。3.1 确定目标页面与数据范围猫眼电影有多个榜单如“票房榜”、“口碑榜”、“热度榜”等。为了获取各年份的数据我们通常选择“榜单”下的“经典影片”或通过搜索筛选功能。一个更直接的思路是利用猫眼电影提供的“年度票房”或按年份筛选的列表页。例如我们可以观察到类似https://maoyan.com/films?showType1yearId13这样的 URL 模式其中yearId参数很可能对应着不同的年份。我们的策略是首先手动在猫眼电影网站上找到按年份浏览电影的入口观察其 URL 规律和页面交互方式是点击切换还是下拉加载。然后规划我们的采集路径是遍历每一个年份的独立页面还是在一个页面上通过操作筛选控件来切换年份前者逻辑简单但可能涉及多次页面跳转后者效率可能更高但需要处理前端组件的状态。3.2 使用开发者工具DevTools分析元素这是最关键的一步。打开 Chrome 浏览器访问目标页面按下F12或CtrlShiftI打开开发者工具。元素Elements面板用于查看网页的 DOM 结构。点击左上角的箭头图标或按CtrlShiftC然后去点击页面上你想采集的数据比如电影名、评分、票房数字。开发者工具会自动在 Elements 面板中定位到对应的 HTML 元素。你需要观察它的标签如div,a,span、类名class、IDid或其他属性>from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options Options() chrome_options.add_argument(‘--disable-blink-featuresAutomationControlled‘) chrome_options.add_experimental_option(‘excludeSwitches‘, [‘enable-automation‘]) chrome_options.add_experimental_option(‘useAutomationExtension‘, False) # 还可以尝试添加用户代理User-Agent来更像真人浏览器 chrome_options.add_argument(‘user-agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36‘) driver webdriver.Chrome(optionschrome_options) # 执行CDP命令防止被检测 driver.execute_cdp_cmd(‘Page.addScriptToEvaluateOnNewDocument‘, { ‘source‘: ‘Object.defineProperty(navigator, “webdriver“, {get: () undefined})‘ })侦察完毕我们对目标有了清晰的认识。接下来就是构建我们自动化脚本的骨架了。4. 脚本骨架搭建与核心功能实现现在我们将把前面的分析和策略转化为具体的代码。我会分模块讲解并解释每一段代码的意图。4.1 初始化驱动与访问页面首先我们导入必要的库并配置 Chrome 驱动。这里我强烈建议将ChromeDriver的路径显式地写在代码里避免依赖系统 PATH 可能带来的不确定性。import time import pandas as pd 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 from selenium.common.exceptions import TimeoutException, NoSuchElementException # 配置 Chrome 选项 chrome_options webdriver.ChromeOptions() # 无头模式不显示浏览器界面适合在服务器上运行 # chrome_options.add_argument(‘--headless‘) chrome_options.add_argument(‘--disable-blink-featuresAutomationControlled‘) chrome_options.add_argument(‘--disable-gpu‘) chrome_options.add_argument(‘--no-sandbox‘) # 对于Linux服务器有时需要 chrome_options.add_argument(‘user-agentMozilla/5.0...‘) # 替换为你的UA # 指定 chromedriver 路径请修改为你的实际路径 driver_path ‘./chromedriver‘ # 或者 ‘C:/path/to/chromedriver.exe‘ driver webdriver.Chrome(executable_pathdriver_path, optionschrome_options) driver.execute_cdp_cmd(‘Page.addScriptToEvaluateOnNewDocument‘, { ‘source‘: ‘Object.defineProperty(navigator, “webdriver“, {get: () undefined})‘ }) # 设置一个全局的隐式等待时间单位秒在查找元素时如果未立即找到会等待最多10秒 driver.implicitly_wait(10) wait WebDriverWait(driver, 10) # 显式等待对象接下来我们访问目标页面。假设我们发现了年份筛选的规律URL 中的yearId从 1 到 20 可能分别代表 2000 到 2020 年这需要你手动验证。base_url ‘https://maoyan.com/films?showType1yearId{}‘4.2 实现年份遍历与页面抓取我们将设计一个主循环遍历每一个年份 ID构造 URL然后驱动浏览器访问。all_movies_data [] # 用于存储所有年份所有电影的数据 for year_id in range(1, 21): # 假设年份ID从1到20 year_url base_url.format(year_id) print(f‘正在采集年份ID {year_id} 页面{year_url}‘) try: driver.get(year_url) # 等待页面关键元素加载例如电影列表的容器 # 这里需要替换成你实际页面中电影列表容器的CSS选择器 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ‘.movies-list .movie-item‘))) # 可能需要处理滚动加载这里先获取第一屏数据 movie_items driver.find_elements(By.CSS_SELECTOR, ‘.movies-list .movie-item‘) # 如果页面是滚动加载我们需要模拟滚动直到没有新内容 last_count 0 while True: # 滚动到底部 driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);“) time.sleep(2) # 等待新内容加载这个时间可以根据网络情况调整 # 再次获取所有电影项 current_movie_items driver.find_elements(By.CSS_SELECTOR, ‘.movies-list .movie-item‘) if len(current_movie_items) last_count: # 数量不再增加说明已加载完毕 print(f‘ 年份ID {year_id} 共加载了 {len(current_movie_items)} 部电影。‘) movie_items current_movie_items break last_count len(current_movie_items) # 解析当前页面的每一个电影项 for item in movie_items: movie_data parse_movie_item(item, year_id) if movie_data: all_movies_data.append(movie_data) except TimeoutException: print(f‘年份ID {year_id} 页面加载超时或未找到电影列表跳过。‘) continue except Exception as e: print(f‘处理年份ID {year_id} 时发生未知错误{e}‘) continue print(‘所有年份数据采集完成‘)4.3 解析电影条目函数parse_movie_item这个函数负责从单个电影项 HTML 元素中提取我们需要的信息。这里非常依赖之前用开发者工具分析出的元素选择器。def parse_movie_item(movie_element, year_id): “““ 从一个电影项元素中提取数据。 返回一个字典包含电影名、评分、票房、主演、年份等信息。 如果解析失败返回 None。 “““ try: # 电影名 - 需要根据实际页面结构调整选择器 # 例如a class“name“电影名/a name_elem movie_element.find_element(By.CSS_SELECTOR, ‘.name‘) movie_name name_elem.text.strip() # 评分 - 可能不存在未上映或暂无评分 score ‘N/A‘ try: score_elem movie_element.find_element(By.CSS_SELECTOR, ‘.score‘) score score_elem.text.strip() except NoSuchElementException: pass # 没有评分是正常情况 # 票房 - 同样可能不存在 box_office ‘N/A‘ try: # 注意票房信息可能在另一个元素里选择器需要调整 box_office_elem movie_element.find_element(By.CSS_SELECTOR, ‘.box-office‘) box_office box_office_elem.text.strip() except NoSuchElementException: pass # 主演 - 可能是一个列表用逗号分隔 actors ‘N/A‘ try: actors_elem movie_element.find_element(By.CSS_SELECTOR, ‘.actors‘) actors actors_elem.text.strip() except NoSuchElementException: pass # 上映日期/年份 - 我们可以从 year_id 映射或者从页面提取 # 这里假设 year_id 可以映射为实际年份例如 year_id13 - 2013年 release_year 2000 year_id - 1 # 这是一个示例映射必须根据实际情况调整 # 电影详情页链接 - 如果需要进一步采集更详细的信息 link ‘N/A‘ try: link_elem movie_element.find_element(By.CSS_SELECTOR, ‘.name‘) link link_elem.get_attribute(‘href‘) except NoSuchElementException: pass return { ‘电影名‘: movie_name, ‘评分‘: score, ‘票房‘: box_office, ‘主演‘: actors, ‘上映年份‘: release_year, ‘详情页链接‘: link, ‘采集年份ID‘: year_id } except Exception as e: # 记录解析单个项目时的错误但不中断整个流程 print(f‘解析电影条目时出错{e}‘) return None重要提示上面代码中的 CSS 选择器如.name,.score都是示例绝对不适用于真实的猫眼电影页面你必须使用开发者工具找到目标元素在真实页面中对应的、唯一的、稳定的选择器。可能是类名、可能是属性组合。这是整个项目中最需要耐心和技巧的部分。选择器不稳定脚本就非常容易失效。4.4 数据存储与导出所有数据采集并解析完成后我们使用pandas将其转换为 DataFrame然后保存为文件。# 将数据列表转换为 DataFrame df pd.DataFrame(all_movies_data) # 查看前几行数据 print(df.head()) # 保存为 CSV 文件通用性好 csv_filename f‘maoyan_movies_{time.strftime(“%Y%m%d_%H%M%S“)}.csv‘ df.to_csv(csv_filename, indexFalse, encoding‘utf-8-sig‘) # ‘utf-8-sig‘ 能让 Excel 正确识别中文 print(f‘数据已保存到 {csv_filename}‘) # 保存为 Excel 文件可读性更好 excel_filename f‘maoyan_movies_{time.strftime(“%Y%m%d_%H%M%S“)}.xlsx‘ df.to_excel(excel_filename, indexFalse) print(f‘数据已保存到 {excel_filename}‘) # 最后关闭浏览器驱动 driver.quit()至此一个基础但功能完整的采集脚本骨架就搭建好了。然而这只是开始。在实际运行中你会遇到各种各样的问题。下一章我们就来深入探讨这些“坑”以及如何填平它们。5. 实战中的常见问题与精细化调试脚本能跑起来不代表就万事大吉了。在实际采集过程中你会遇到元素定位失败、页面加载策略变化、反爬升级、数据格式混乱等一系列问题。这一章我们就像医生一样对脚本进行“体检”和“治疗”。5.1 元素定位失败选择器的“稳定性”与“等待”的艺术这是最常见的问题。昨天还能跑通的脚本今天可能就报NoSuchElementException了。原因通常有两个页面结构变了网站改版类名、ID 变了。这是最无奈的情况需要重新分析页面。元素还没加载出来这是我们可以通过代码优化来解决的。解决方案更健壮的定位与等待策略优先使用相对稳定且唯一的属性不要依赖那些可能随样式变化的类名如class“movie-item-123“。优先使用># 不好的做法直接查找依赖隐式等待 # element driver.find_element(By.CSS_SELECTOR, ‘.unstable-class‘) # 好的做法显式等待元素可点击或可见 try: # 等待电影列表容器出现 movie_list_container wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, ‘div[data-type“movie-list“]‘)) ) # 等待列表中的第一个电影项出现并可交互 first_movie_item wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, ‘div[data-type“movie-list“] div:first-child‘)) ) except TimeoutException: print(“关键元素加载超时可能页面结构已变或网络问题。“) # 这里可以记录日志、截图甚至尝试备用选择器 driver.save_screenshot(‘timeout_error.png‘)备用选择器与重试机制对于非常重要的元素可以准备一两个备用选择器。如果主选择器失败尝试用备用的。甚至可以封装一个带有重试功能的查找函数。5.2 处理动态内容与 iframe有时你需要的数据并不在主页面的 DOM 树里而是嵌套在一个iframe中。Selenium 默认操作的是最外层的页面。要操作 iframe 内的元素必须先切换进去。# 1. 定位到 iframe 元素 iframe_element driver.find_element(By.CSS_SELECTOR, ‘iframe#contentFrame‘) # 2. 切换到该 iframe driver.switch_to.frame(iframe_element) # 3. 现在可以操作 iframe 内的元素了 inner_element driver.find_element(By.ID, ‘inner-data‘) # 4. 操作完成后切回主文档 driver.switch_to.default_content()5.3 反爬虫策略应对行为模拟与请求控制除了之前提到的隐藏 WebDriver 特征还需要注意控制请求频率在循环中尤其是翻页或切换年份时使用time.sleep(random.uniform(1, 3))来加入随机延迟模拟人类操作避免给服务器造成过大压力。处理验证码如果遇到验证码脚本基本就失效了。这时需要考虑1) 寻找是否有无需验证码的接口或移动端页面2) 使用付费的打码平台 API3) 降低采集频率避免触发验证码。Cookie 与 Session 管理有些页面需要登录后才能查看。Selenium 可以模拟登录过程获取登录后的 Cookie并在后续请求中携带。你甚至可以将有效的 Cookie 保存到文件下次启动时加载避免重复登录。5.4 数据清洗与异常处理采集到的原始数据往往是“脏”的需要清洗缺失值处理票房、评分可能为“暂无”或空字符串。在parse_movie_item函数中我们已经用‘N/A‘做了占位。后续分析时需要决定是删除这些记录还是用平均值、中位数填充或者单独标记。格式统一票房数据可能是“12.34亿”、“5,678万”需要统一转换为数值类型如以“万”为单位。评分可能是“9.2”、“暂无评分”需要区分。去重由于翻页或加载机制同一部电影可能被采集多次。可以用电影名年份作为唯一键进行去重。在脚本中我们应该增强异常处理确保单个项目的解析失败不会导致整个脚本崩溃并且要记录足够的日志方便事后排查。import logging logging.basicConfig(levellogging.INFO, format‘%(asctime)s - %(levelname)s - %(message)s‘) logger logging.getLogger(__name__) # 在解析函数和主循环中使用 logger 记录信息而不是简单的 print logger.info(f‘开始采集年份ID {year_id}‘) try: # ... 采集逻辑 ... except Exception as e: logger.error(f‘采集年份ID {year_id} 失败错误信息{e}‘, exc_infoTrue) # exc_infoTrue 会打印堆栈跟踪通过以上这些调试和优化你的脚本将从“脆弱”变得“健壮”能够应对更多真实世界的复杂情况。6. 项目优化与扩展思路一个基础的采集脚本完成后我们可以从效率、稳定性和功能上对其进行优化和扩展使其成为一个更可靠、更强大的数据生产工具。6.1 效率优化并发与异步当前脚本是单线程同步执行的采集 N 个年份需要等待 N 个页面顺序加载。如果数据量很大这会非常慢。优化思路多线程/多进程使用 Python 的concurrent.futures模块为每个年份或每批页面创建一个线程或进程去采集。但要注意Selenium 的 WebDriver 对象通常不是线程安全的。一个常见的模式是每个线程拥有自己独立的 WebDriver 实例。这会消耗更多内存但能极大提升速度。异步IO (asyncio Playwright)对于现代动态网页另一个强大的选择是微软的 Playwright。它原生支持异步可以同时控制多个浏览器上下文Context或页面Page效率比多线程Selenium 更高而且 API 更现代。迁移到 Playwright 是未来可以考虑的方向。6.2 稳定性提升状态持久化与断点续采想象一下脚本在采集到第15年时因为网络波动崩溃了。你难道要重头再来吗断点续采功能至关重要。思路在每次成功采集并保存一个年份或一页的数据后立即将数据追加到结果文件如 CSV中并记录当前采集到的“进度”如最后一个成功的年份ID。同时可以将进度单独保存到一个checkpoint.json文件。重启逻辑脚本启动时先检查是否存在进度文件。如果存在则从上次中断的年份ID之后开始采集而不是从头开始。6.3 功能扩展深入详情页与多维数据列表页通常只包含基本信息。如果你需要导演、编剧、片长、类型、剧情简介、更详细的票房分日数据、用户评论等就需要进入每个电影的详情页进行二次采集。策略在主循环中解析列表项时我们已经提取了详情页链接。可以设计一个二级采集函数在获取到所有列表页链接后再逐个访问这些详情页提取更深层的数据。注意事项这会显著增加请求量和采集时间。务必加入更长的随机延迟并考虑使用代理 IP 池来分散请求避免 IP 被封。同时要做好详情页解析失败的处理避免因少数页面结构不同而卡住整个流程。6.4 部署与自动化脚本在本地开发机上运行良好后你可以将其部署到云服务器上并设置定时任务如每周采集一次实现数据的自动更新。环境在 Linux 服务器上你需要安装无头 Chrome 或 Chromium以及对应的 ChromeDriver。任务调度使用cron(Linux) 或Task Scheduler(Windows) 来定时执行你的 Python 脚本。日志与监控将脚本的日志输出到文件并设置简单的监控如脚本运行时长、采集数据条数当出现异常时通过邮件或消息应用通知你。从写出一行行代码到构建一个稳定、高效、可维护的数据采集系统这个过程本身就是一次宝贵的学习和成长。它迫使你从更宏观的视角思考问题包括错误处理、资源管理、调度策略等工程化问题。7. 伦理、法律与最佳实践在享受技术带来的便利时我们必须清醒地认识到数据采集的边界。这不仅关乎技术更关乎责任。7.1 遵守 Robots.txt 与网站条款在开始采集任何网站前第一件事是查看其robots.txt文件通常在网站根目录如https://maoyan.com/robots.txt。这个文件指明了网站允许或禁止爬虫访问哪些路径。虽然这不是法律文件但遵守它是网络爬虫领域的基本礼仪。同时仔细阅读网站的“服务条款”其中往往有关于数据使用的明确规定。7.2 控制采集频率尊重服务器资源你的脚本不应该成为网站的“拒绝服务攻击”工具。务必在请求间添加合理的、随机的延迟例如time.sleep(random.uniform(2, 5))模拟人类浏览的速度。避免在短时间内发起海量请求这可能会对目标网站的正常运营造成影响也极易导致你的 IP 被封锁。7.3 数据用途与版权采集到的数据其版权通常归原始数据生产者猫眼电影所有。你拥有的是通过合法技术手段获取的“事实性数据”的集合。这些数据应主要用于个人学习、研究或非商业性的分析。绝对禁止将原始数据大规模地用于商业盈利、公开售卖或以任何方式损害原网站的利益如直接复制其内容建立竞争性网站。对数据进行聚合、分析后得出的结论、报告其知识产权属于你但引用时最好注明数据来源。7.4 识别与规避个人隐私信息在采集过程中如果意外抓取到用户的个人隐私信息如手机号、邮箱、身份证号等虽然在电影榜单中基本不会出现应立即停止并删除相关数据。处理数据时要有保护用户隐私的意识。技术是一把双刃剑。一个有经验的开发者不仅懂得如何实现功能更懂得在何处止步。将上述最佳实践内化为你的开发习惯你才能在这个领域走得更远、更稳。

相关新闻

iFakeLocation终极指南:3分钟学会免费修改iOS设备位置,无需越狱!

iFakeLocation终极指南:3分钟学会免费修改iOS设备位置,无需越狱!

iFakeLocation终极指南:3分钟学会免费修改iOS设备位置,无需越狱! 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 你是否…

2026/7/30 18:53:54 阅读更多 →
终极《初音未来:歌姬计划 Mega Mix+》模组管理完整指南:5个简单步骤告别复杂安装

终极《初音未来:歌姬计划 Mega Mix+》模组管理完整指南:5个简单步骤告别复杂安装

终极《初音未来:歌姬计划 Mega Mix》模组管理完整指南:5个简单步骤告别复杂安装 【免费下载链接】DivaModManager 项目地址: https://gitcode.com/gh_mirrors/di/DivaModManager 你是否曾为《初音未来:歌姬计划 Mega Mix》模组安装的…

2026/7/30 18:53:54 阅读更多 →
KMS_VL_ALL_AIO:Windows和Office激活的终极免费解决方案

KMS_VL_ALL_AIO:Windows和Office激活的终极免费解决方案

KMS_VL_ALL_AIO:Windows和Office激活的终极免费解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?Office突然变成只读模式让你工作受…

2026/7/30 18:53:54 阅读更多 →

最新新闻

JAVA练习370- 最后一个单词的长度

JAVA练习370- 最后一个单词的长度

题目概览 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hello World" 输出&am…

2026/7/30 19:10:58 阅读更多 →
流域水电智慧调度:基于土星云SE110S系列的“站-域-云”边缘实践

流域水电智慧调度:基于土星云SE110S系列的“站-域-云”边缘实践

本文导读流域梯级调度三大核心痛点:站点分散、数据滞后、协同低效四级边云协同架构与偏远场站硬件选型思路水文预测、梯级调度、调峰响应的边缘落地实现流域调度项目应用成效与实践经验做流域水电调度的朋友都有体会:梯级电站横跨几百公里,偏…

2026/7/30 19:10:58 阅读更多 →
如何快速解析APK文件?APK-Parser完整指南助你轻松获取应用信息

如何快速解析APK文件?APK-Parser完整指南助你轻松获取应用信息

如何快速解析APK文件?APK-Parser完整指南助你轻松获取应用信息 【免费下载链接】apk-parser Apk parser for java 项目地址: https://gitcode.com/gh_mirrors/ap/apk-parser 你是否曾经需要查看Android应用的包名、版本号或权限信息?是否想要分析…

2026/7/30 19:10:58 阅读更多 →
2026这6款硬核降AIGC软件大公开,一键实现AI检测丝滑过审!

2026这6款硬核降AIGC软件大公开,一键实现AI检测丝滑过审!

步入 2026 年,学术圈的风向早已悄然转变。曾经让人焦头烂额的查重问题,如今已不再是最大的难题,取而代之的是更棘手的 AIGC 检测压力。随着 AI 检测技术不断进化,高校对论文的审核标准也愈发严苛,连最细微的 AI 痕迹都…

2026/7/30 19:10:58 阅读更多 →
kill-doc终极文档下载神器:如何免费下载百度文库、原创力文档等30+平台内容

kill-doc终极文档下载神器:如何免费下载百度文库、原创力文档等30+平台内容

kill-doc终极文档下载神器:如何免费下载百度文库、原创力文档等30平台内容 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档&#xf…

2026/7/30 19:10:58 阅读更多 →
Open Battery Information:开源电池诊断修复工具,让“假死“电池重获新生

Open Battery Information:开源电池诊断修复工具,让“假死“电池重获新生

Open Battery Information:开源电池诊断修复工具,让"假死"电池重获新生 【免费下载链接】open-battery-information 项目地址: https://gitcode.com/GitHub_Trending/op/open-battery-information 你是否遇到过电动工具电池突然无法充…

2026/7/30 19:09:57 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻