MCD19A2气溶胶数据处理:从HDF到可分析栅格的Python实战
简介这份资源聚焦MCD19A2遥感数据产品的处理流程面向从事地球科学、环境监测与气候变化研究的遥感从业者及具备一定IDL与GIS基础的学习者帮助解决多影像批量处理、融合、镶嵌、重采样、裁剪及栅格点值提取等实际问题。压缩包共12个文件约11KB包含3个py脚本、3个pro程序、4个xml配置及iml、gitignore等工程文件分别承担Python批处理、IDL/MCTK功能实现与项目配置管理。内容覆盖批量融合、批量镶嵌、批量重采样、批量裁剪以及AOD栅格提取点值等核心环节并涉及PCA、Brovey变换、最近邻与双线性重采样等方法可帮助读者理解从数据预处理到植被指数应用的完整技术链路。目前已有1244人学习下载适合需要借助MCTK与IDL提升MCD19A2处理效率的读者参考。1. MCD19A2 数据处理从 HDF 到可分析栅格的完整链路MCD19A2 是 MODIS 气溶胶产品中分辨率最高的一档1 公里像元、逐日合成很多做大气遥感、地表能量平衡、光伏功率预测的团队都会把它当作气溶胶光学厚度AOD的主数据源。但真正拿到手你会发现它既不是 GeoTIFF也不是规整的 CSV而是 HDF-EOS 格式内部还按轨道分块、按网格铺开直接双击打不开直接读又读不懂。这篇笔记就围绕「MCD19A2 数据处理过程的代码」这件事把从原始 HDF 到可分析栅格的完整链路拆开讲清楚怎么读、怎么筛、怎么投影、怎么批量跑、坑在哪。适合已经拿到数据但卡在第一步的从业者也适合想把这套流程工程化的同学。2. 读懂 MCD19A2 的网格结构为什么直接读会翻车2.1 正弦投影与网格编号数据不是按经纬度排的MCD19A2 用的是 MODIS 标准的正弦投影Sinusoidal全球被切成若干个大网格tile每个 tile 覆盖 1200×1200 个 1 公里像元。文件名里那串hXXvYY就是网格编号h 代表水平方向v 代表垂直方向。如果你直接拿经纬度去索引数组结果一定是错的因为数组的行列号对应的是投影坐标不是经纬度。常见做法是先确定研究区落在哪些 tile 上再按 tile 批量下载。比如中国东部通常涉及 h27v05、h28v05 这几个。确定 tile 之后读数据时要用pyproj或gdal把投影坐标转成经纬度或者反过来把经纬度转成投影坐标再去切片。这一步不做后面所有分析都是空中楼阁。from pyproj import Proj import numpy as np # MODIS 正弦投影定义 modis_proj Proj( projsinu lon_00 x_00 y_00 a6371007.181 b6371007.181 unitsm no_defs ) # tile h27v05 的左上角投影坐标单位米 # 每个 tile 1200 像元1 公里分辨率所以跨度 1200000 米 tile_size 1200000 h, v 27, 5 x_min -20015109.354 h * tile_size y_max 10007554.677 - v * tile_size # 把经纬度转成该 tile 内的行列号 lon, lat 116.4, 39.9 # 某地经纬度 x, y modis_proj(lon, lat) col int((x - x_min) / 1000) row int((y_max - y) / 1000) print(f行列号: row{row}, col{col})这段代码的核心是先把经纬度投到正弦坐标系再减去 tile 左上角坐标除以 1000 米得到行列号。参数a和b是 MODIS 用的球体半径不是 WGS84 椭球写错了会有几百米偏移。lon_00表示中央经线为 0 度这是 MODIS 正弦投影的固定约定。2.2 科学数据集SDS层AOD 只是其中一层一个 MCD19A2 文件里通常包含多个 SDS比如Optical_Depth_047、Optical_Depth_055、AOD_QA、AOD_Uncertainty等。047 和 055 分别对应 0.47 微米和 0.55 微米波段的 AOD做气溶胶分析常用 055做蓝光波段大气校正常用 047。QA 层是质量控制里面按位存储了云掩膜、地表类型、QA 置信度等信息不读 QA 直接拿 AOD 用等于把云也当气溶胶算了。用pyhdf读 SDS 是最直接的方式但pyhdf在 Windows 上安装经常出问题很多人会卡在这一步。替代方案是用gdal的subdatasets接口或者用rasterio配合h5py注意 MCD19A2 是 HDF4 不是 HDF5h5py读不了这里容易踩坑。稳妥做法是pyhdf或gdal。from pyhdf.SD import SD, SDC import numpy as np file_path MCD19A2.A2024001.h27v05.061.2024003.hdf hdf SD(file_path, SDC.READ) # 列出所有 SDS 名称 datasets hdf.datasets() for name in datasets: print(name, datasets[name][0], datasets[name][1]) # 名称、维度、类型 # 读取 0.55 微米 AOD aod hdf.select(Optical_Depth_055) aod_data aod[:] # 填充值通常是 -28672需要转成 NaN aod_data aod_data.astype(np.float32) aod_data[aod_data -28672] np.nan # 缩放因子 0.001 aod_data aod_data * 0.001 print(aod_data.shape, np.nanmin(aod_data), np.nanmax(aod_data))这里的关键参数是填充值-28672和缩放因子0.001不同版本可能略有差异建议先打印aod.attributes()确认。aod[:]读出来是整数直接当浮点用会丢精度必须先转float32再缩放。QA 层的读取方式类似但解析要按位操作后面单独讲。2.3 时间维度逐日合成不是单景影像MCD19A2 是逐日产品但一天之内可能有多条轨道经过同一区域所以一个文件里可能包含多个时间层。SDS 的维度通常是(time, row, col)或者(row, col)加一个time属性。如果你只取[0]可能只拿到当天第一条轨道的值后面轨道的就被丢了。正确做法是先看维度如果是三维按时间轴做合成比如取最大值或按 QA 加权平均。# 假设 aod_data 是 (time, row, col) if aod_data.ndim 3: # 按时间轴取有效值最多的那个或者做最大值合成 valid_count np.sum(~np.isnan(aod_data), axis0) # 取有效值最多的层 idx np.argmax(valid_count, axis0) aod_daily np.take_along_axis(aod_data, idx[np.newaxis, :, :], axis0)[0] else: aod_daily aod_data这段逻辑是对每个像元找出时间轴上有效值最多的那一层取该层的值。比简单取[0]合理也比直接np.nanmax更保守因为最大值可能来自云边缘的异常高值。实际项目中我一般会结合 QA 层先过滤掉低质量像元再做合成。3. 用 Python 批量处理从单文件到时间序列3.1 批量读取与 QA 过滤把云和低质量像元剔掉单文件跑通之后下一步是批量。MCD19A2 一年 365 个文件一个研究区可能涉及几个 tile手工点不现实。批量处理的核心是两件事一是循环读文件二是按 QA 过滤。QA 层AOD_QA是一个 16 位整数不同位段含义不同常见做法是提取「QA 置信度」和「云掩膜」两个字段。import os import glob import numpy as np from pyhdf.SD import SD, SDC def read_aod_with_qa(file_path): hdf SD(file_path, SDC.READ) aod hdf.select(Optical_Depth_055)[:].astype(np.float32) qa hdf.select(AOD_QA)[:].astype(np.uint16) # 填充值处理 aod[aod -28672] np.nan aod aod * 0.001 # QA 位解析不同版本位段可能不同这里以常见 061 版本为例 # 云掩膜通常在 bit 0-2QA 置信度在 bit 8-10 cloud_mask qa 0b111 qa_conf (qa 8) 0b111 # 只保留无云且高置信度的像元 good (cloud_mask 0) (qa_conf 2) aod[~good] np.nan hdf.end() return aod # 批量处理 file_list sorted(glob.glob(MCD19A2.A2024*.hdf)) stack [] for f in file_list: aod read_aod_with_qa(f) stack.append(aod) # 堆成时间序列 (time, row, col) time_series np.stack(stack, axis0) print(time_series.shape)QA 位解析是这套流程里最容易翻车的地方。不同版本061 和 061 之前位段定义不一样有的把云掩膜放在 bit 0-1有的放在 bit 0-2。稳妥做法是查对应版本的 ATBD 文档或者先打印几个 QA 值手动验证。qa_conf 2表示中等以上置信度这个阈值可以根据你的应用调做气候趋势分析可以放宽到 1做单日高精度反演建议卡到 3。3.2 投影转换与重采样把正弦投影转成经纬度网格批量读完之后数据还是正弦投影的数组没法直接和气象数据、地面站点做匹配。常见做法是转成 WGS84 经纬度网格或者转成你研究区常用的投影。用gdal的Warp最稳但配置稍繁琐用pyresample更灵活适合做自定义重采样。from osgeo import gdal, osr import numpy as np def write_geotiff(data, output_path, h, v): # 创建正弦投影的 GeoTIFF driver gdal.GetDriverByName(GTiff) rows, cols data.shape dataset driver.Create(output_path, cols, rows, 1, gdal.GDT_Float32) # 设置投影 srs osr.SpatialReference() srs.ImportFromProj4( projsinu lon_00 x_00 y_00 a6371007.181 b6371007.181 unitsm no_defs ) dataset.SetProjection(srs.ExportToWkt()) # 设置地理变换左上角坐标 像元大小 tile_size 1200000 x_min -20015109.354 h * tile_size y_max 10007554.677 - v * tile_size geotransform (x_min, 1000, 0, y_max, 0, -1000) dataset.SetGeoTransform(geotransform) band dataset.GetRasterBand(1) band.WriteArray(data) band.SetNoDataValue(np.nan) dataset.FlushCache() dataset None # 写出后再用 gdal.Warp 转经纬度 def warp_to_wgs84(src_path, dst_path): gdal.Warp( dst_path, src_path, dstSRSEPSG:4326, resampleAlggdal.GRA_Bilinear, width1200, height1200 ) write_geotiff(time_series[0], aod_sinu.tif, 27, 5) warp_to_wgs84(aod_sinu.tif, aod_wgs84.tif)这里分两步先写出正弦投影的 GeoTIFF再用gdal.Warp转 WGS84。resampleAlg选双线性适合连续变量选最近邻适合分类变量。width和height控制输出分辨率不设的话gdal会自动算但可能和你预期不一致。注意SetNoDataValue(np.nan)在部分gdal版本里对 Float32 支持不好可以改用-9999做填充值。3.3 时间序列合成日尺度、月尺度、年尺度怎么选拿到时间序列之后下一步是按分析需求做合成。做气溶胶日变化分析用日尺度做气候趋势用月均值或年均值做污染过程复盘用日尺度加滑动平均。合成方式也有讲究简单平均会被极端值拉偏中位数更稳健最大值合成适合捕捉污染峰值。import numpy as np import pandas as pd # 假设 time_series 是 (time, row, col)dates 是对应日期列表 dates pd.date_range(2024-01-01, periodstime_series.shape[0], freqD) # 月均值 monthly [] for month in range(1, 13): mask dates.month month if mask.sum() 0: monthly.append(np.nanmean(time_series[mask], axis0)) monthly np.stack(monthly, axis0) # 年均值 annual np.nanmean(time_series, axis0) # 有效像元数统计少于 10 天有效值的像元标记为不可用 valid_days np.sum(~np.isnan(time_series), axis0) annual[valid_days 10] np.nan月均值用np.nanmean自动跳过 NaN但要注意如果某个月全是 NaN结果也是 NaN需要额外判断。有效像元数统计是很多人忽略的一步如果某个像元一年只有 3 天有效值年均值代表性很差直接拿去做趋势分析会引入虚假信号。我一般会设一个阈值比如少于 10 天就标记为不可用。4. 避坑与排查MCD19A2 处理中最容易踩的 5 个坑4.1 坑一把 HDF4 当 HDF5 读报错找不到组现象用h5py.File()打开 MCD19A2 文件报OSError: Unable to open file或者能打开但找不到任何 dataset。原因MCD19A2 是 HDF4 格式不是 HDF5。h5py只支持 HDF5两者虽然都叫 HDF但底层结构完全不同。解决改用pyhdf或gdal。pyhdf安装如果失败可以试conda install -c conda-forge pyhdf比 pip 稳。如果只能用gdal用gdal.Open()后调GetSubDatasets()列出所有 SDS。4.2 坑二QA 位段解析错位把云像元当晴空现象过滤完 QA 之后AOD 空间分布图上出现大片异常高值或者研究区整体 AOD 偏高。原因QA 位段定义在不同版本间有差异直接照搬旧代码会解析错位。比如把云掩膜位当成 QA 置信度位结果把云像元保留了。解决先打印几个 QA 值手动转成二进制看位分布。再对照该版本的 ATBD 文档确认位段。不确定时保守做法是只保留 QA 值最高的那一档宁可少要数据也不要引入云污染。4.3 坑三填充值没处理统计结果全被拉偏现象算出来的 AOD 均值是负数或者量级明显不对。原因MCD19A2 的填充值是-28672如果不转成 NaN直接参与均值计算会把结果拉成负值。缩放因子0.001如果忘了乘结果会大 1000 倍。解决读数据后第一步就是data[data -28672] np.nan第二步乘缩放因子。建议把这两步封装成一个函数所有读取都走这个函数避免遗漏。4.4 坑四投影转换后行列号对不上切片切错位置现象转成 WGS84 之后研究区的位置偏移了几百公里或者切片切到了隔壁区域。原因正弦投影的球体半径和 WGS84 椭球不一致直接用经纬度算行列号会有偏移。另外 tile 的左上角坐标如果记错整体会平移。解决用pyproj做投影转换不要手算。tile 的左上角坐标可以从gdal读出的GeoTransform里拿不要凭记忆写。切片前先画个简图确认位置。4.5 坑五批量处理内存爆掉程序被系统杀掉现象处理到第 100 个文件时程序突然退出或者系统变得极卡。原因把所有文件读进一个列表再np.stack如果每个文件是 1200×1200 的 float32一年 365 个就是 365×1200×1200×4 字节约 2GB加上中间变量可能到 4-5GB。如果研究区涉及多个 tile内存翻倍。解决不要一次性堆所有文件。可以分块处理比如按月堆算完月均值后释放内存。或者用memmap把中间结果写到磁盘。如果只是算统计量可以用增量方式边读边累加不保留完整时间序列。5. 进阶技巧用 xarray 把 MCD19A2 管起来5.1 用 xarray 封装让时间序列自带坐标和属性前面用 numpy 裸数组处理灵活但容易丢坐标信息。做到一定规模后我一般会转成xarray.DataArray把时间、经纬度、投影都挂上去后面做切片、重采样、绘图都省事。xarray本身不直接读 HDF4但可以先用pyhdf读成 numpy再包成DataArray。import xarray as xr import numpy as np import pandas as pd def build_xarray(time_series, dates, lons, lats): time_series: (time, row, col) dates: 时间列表 lons, lats: 二维经纬度网格形状 (row, col) da xr.DataArray( time_series, dims(time, y, x), coords{ time: pd.to_datetime(dates), lon: ((y, x), lons), lat: ((y, x), lats), }, nameAOD_055, attrs{ units: unitless, long_name: Aerosol Optical Depth at 0.55 micron, source: MCD19A2 v061, fill_value: np.nan, } ) return da # 假设已经算好了 lons 和 lats 二维数组 da build_xarray(time_series, dates, lons, lats) # 按经纬度切片 subset da.sel(lonslice(110, 120), latslice(30, 40)) # 按月重采样 monthly da.resample(time1MS).mean(dimtime, skipnaTrue) # 导出为 NetCDF monthly.to_netcdf(aod_monthly.nc)这样封装之后da.sel()可以直接按经纬度切片resample可以按时间重采样to_netcdf可以导出成标准格式后面用xarray或panoply都能直接打开。属性里的source和units建议写清楚方便半年后的自己回忆。5.2 验证方法用地面站点或再分析数据做交叉检查处理完的数据到底对不对不能只看图好看。我一般会做两步验证一是和同区域的 AERONET 站点数据比对看相关系数和偏差二是和再分析资料比如 MERRA-2 的 AOD做空间分布对比看大尺度格局是否一致。如果相关系数低于 0.6或者偏差超过 0.1就要回头查 QA 过滤和投影转换。from scipy.stats import pearsonr import numpy as np # 假设 station_aod 是站点观测satellite_aod 是匹配后的卫星值 mask ~np.isnan(station_aod) ~np.isnan(satellite_aod) r, p pearsonr(station_aod[mask], satellite_aod[mask]) bias np.mean(satellite_aod[mask] - station_aod[mask]) rmse np.sqrt(np.mean((satellite_aod[mask] - station_aod[mask]) ** 2)) print(f相关系数: {r:.3f}, 偏差: {bias:.3f}, RMSE: {rmse:.3f})匹配时要注意时间窗口卫星过境时间和站点观测时间差超过 30 分钟的建议剔除。空间上一般取站点周围 3×3 或 5×5 像元的均值单像元匹配噪声太大。5.3 一个具体技巧用 Dask 做并行加速如果研究区覆盖多个 tile、时间跨度几年串行处理会慢到怀疑人生。xarray配合dask可以自动并行把chunk设好内存和速度都能兼顾。import dask.array as da # 把 time_series 转成 dask 数组按时间分块 dask_arr da.from_array(time_series, chunks(30, 1200, 1200)) # 包成 xarray da_xr xr.DataArray( dask_arr, dims(time, y, x), coords{time: pd.to_datetime(dates)}, nameAOD_055 ) # 计算月均值dask 会自动并行 monthly da_xr.resample(time1MS).mean(dimtime, skipnaTrue) result monthly.compute() # 到这里才真正触发计算chunks(30, 1200, 1200)表示按时间每 30 天切一块空间不切。如果内存还是紧张可以把空间也切小比如(30, 600, 600)。compute()之前所有操作都是惰性的不会占内存只有compute()才真正算。这个技巧在我处理 5 年、10 个 tile 的数据时救过命串行要跑一晚上并行后两小时出结果。最后说个血泪教训MCD19A2 的 QA 层一定要先看再过滤不要照搬网上的代码。不同版本、不同时间段的位段定义可能有细微差异我因为这个问题返工过两次。现在我的习惯是每拿到一批新数据先抽三个文件打印 QA 的二进制分布确认位段含义后再写过滤逻辑。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Java浏览器自动化新选择:Playwright爬虫与测试实战

Java浏览器自动化新选择:Playwright爬虫与测试实战

说起 Playwright for Java,很多 Java 开发者的第一反应是“又一个浏览器自动化库?”。我在爬虫和自动化测试两个方向都踩过不少坑,从最早用 Selenium 写采集脚本,到后来被等待、弹窗、iframe 折腾得头大,所以当 Playwr…

2026/10/13 22:48:11 阅读更多 →
HDwiki 6.0 部署实战:PHP+MySQL 中文维基系统落地指南

HDwiki 6.0 部署实战:PHP+MySQL 中文维基系统落地指南

简介:互动百科HDwiki 6.0 UTF8 是一套面向中文站长与PHP开发者开源的维基建站系统,专为构建专业级中文百科、知识库或企业内部Wiki平台设计,兼顾二次开发灵活性与生产环境安全性。资源为完整可部署的PHP源码包,含核心程序、后台管…

2026/10/13 22:48:11 阅读更多 →
Android 7.0 安装 apk 兼容性指南:FileProvider 与 7z 解压实战

Android 7.0 安装 apk 兼容性指南:FileProvider 与 7z 解压实战

简介:这份资源面向使用Unity进行Android开发的工程师,聚焦Android 7.0系统下APK无法覆盖安装的典型问题。内容围绕版本码调整、签名一致性、AAR库集成、原生插件调用与热更新等思路展开,帮助开发者理解覆盖安装失败的成因并找到可行的更新策略…

2026/10/13 22:48:11 阅读更多 →

最新新闻

构建数学解题Agent:从LLM局限到工具调用与验证优先架构

构建数学解题Agent:从LLM局限到工具调用与验证优先架构

1. 从“让模型直接做数学”到“让模型组织数学”写这篇的时候,我翻了下前面三篇的留言,发现问得最多的不是某一个具体提示词怎么写,而是一类带着困惑的问题:为什么我让大模型算个积分、解个方程,它经常一本正经地给我一…

2026/10/14 4:47:57 阅读更多 →
C++类型转换详解:原理、实践与陷阱

C++类型转换详解:原理、实践与陷阱

1. 类型转换的本质与分类在C编程中,类型转换是每个开发者每天都会遇到的常规操作。但看似简单的类型转换背后,却隐藏着许多值得深入探讨的技术细节。类型转换本质上是在不同类型之间建立桥梁的过程,它决定了数据如何在不同类型间流动和解释。…

2026/10/14 4:47:57 阅读更多 →
B2B电商平台银联电子支付实战接入指南

B2B电商平台银联电子支付实战接入指南

1. 项目概述:为什么一个B2B电商平台必须认真对待银联电子支付接入“B2B电商平台——ChinaPay银联电子支付功能(实战)”,这个标题看起来平实,甚至有点老派,但背后藏着的是中国产业数字化进程中一个极其关键却…

2026/10/14 4:47:57 阅读更多 →
Rabbit health check failed排查:从健康检查原理到连接配置修复

Rabbit health check failed排查:从健康检查原理到连接配置修复

排查过一阵“Rabbit health check failed”报错之后,我发现不少开发者在Spring Cloud项目里见到这个日志的第一反应都是先Check一下RabbitMQ的端口通不通、账号密码对不对,结果发现Rabbit本身好好的,消息也能发能收,但服务注册到注…

2026/10/14 4:47:57 阅读更多 →
亲测2026最新10款免费降ai率工具(附工具优缺点对比图)

亲测2026最新10款免费降ai率工具(附工具优缺点对比图)

看到满页飘红的AIGC检测结果,真的挺让人头疼的。我之前为了降低ai率,各种偏方都试过,现在网上的降ai率工具五花八门,挑得人眼晕。 为了搞清楚到底哪个靠谱,我干脆把市面上热度最高的10款工具全测了一遍。今天把这些免…

2026/10/14 4:47:57 阅读更多 →
Qt Linux打包失败原因与linuxdeployqt避坑指南

Qt Linux打包失败原因与linuxdeployqt避坑指南

简介:本资源是一份面向Linux Qt开发者的技术实践指南,聚焦Ubuntu环境下使用linuxdeployqt工具完成Qt程序跨机部署的核心痛点。针对无Qt运行环境的目标机器,系统性梳理了从Qt开发环境配置、linuxdeployqt源码编译(含Ubuntu 18.04兼…

2026/10/14 4:46:57 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →