影刀RPA 网页表格采集进阶:合并单元格处理
影刀RPA 网页表格采集进阶合并单元格处理作者林焱什么情况用什么采集网页表格时遇到合并单元格——表头跨了两列、某个分类名占了三行——直接按行遍历会导致数据错位。在影刀RPA里需要先解析表格结构还原合并单元格的值再按行列提取数据。适用场景采集带合并表头的报表、财务表格的合并分类行、排班表的跨行单元格、带层级结构的表格数据。怎么做基础表格采集简单表格直接用影刀【提取网页数据表格】或pandas读取拼多多店群自动化报活动上架importpandasaspd# 方式1pandas直接读取HTML表格tablespd.read_html(https://example.com/report)dftables[0]# 取第一个表格# 方式2影刀【提取网页数据表格】指令# 在影刀中直接用可视化指令提取适合标准表格合并单元格处理frombs4importBeautifulSoupimportrequestsdefextract_table_with_merged_cells(html,table_index0):提取带合并单元格的表格soupBeautifulSoup(html,html.parser)tablesoup.find_all(table)[table_index]rowstable.find_all(tr)ifnotrows:return[]# 1. 计算表格实际列数考虑colspanmax_cols0forrowinrows:cols0forcellinrow.find_all([td,th]):colspanint(cell.get(colspan,1))colscolspan max_colsmax(max_cols,cols)# 2. 初始化数据矩阵num_rowslen(rows)num_colsmax_cols data[[None]*num_colsfor_inrange(num_rows)]# 3. 填充数据处理rowspan和colspanforr,rowinenumerate(rows):cellsrow.find_all([td,th])col_idx0forcellincells:# 跳过已被rowspan占用的位置whilecol_idxnum_colsanddata[r][col_idx]isnotNone:col_idx1ifcol_idxnum_cols:breaktextcell.get_text(stripTrue)colspanint(cell.get(colspan,1))rowspanint(cell.get(rowspan,1))# 填充当前及合并的列forcinrange(colspan):ifcol_idxcnum_cols:data[r][col_idxc]text# 填充rowspan占用的行forr_offinrange(1,rowspan):ifrr_offnum_rows:forcinrange(colspan):ifcol_idxcnum_cols:data[rr_off][col_idxc]text col_idxcolspan# 4. 转为DataFramedfpd.DataFrame(data[1:],columnsdata[0])# 第一行作为表头returndf# 使用urlhttps://example.com/sales_reportresponserequests.get(url,timeout10)dfextract_table_with_merged_cells(response.text,table_index0)df.to_excel(rC:\Data\table_data.xlsx,indexFalse)影刀RPA中的操作流程1. 【打开网页】→ 打开目标报表页面 2. 【执行Python代码】→ 获取页面HTML 3. 【执行Python代码】→ 解析合并单元格表格 4. 【写入Excel文件】→ 保存数据 5. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8f1c1666cd15454a8749e60ed924ad80.png#pic_center) 6. 【翻页处理】→ 如果有分页循环1-4在影刀中的Python代码节点# 获取当前页面HTML# 方式1用影刀【获取网页源代码】指令获取html存到变量# 方式2直接用requestsimportrequestsfrombs4importBeautifulSoupimportpandasaspd urlhttps://example.com/report?page1headers{User-Agent:Mozilla/5.0...}responserequests.get(url,headersheaders,timeout10)dfextract_table_with_merged_cells(response.text)# 通过yd_var传递给影刀yd_var[table_data]df.to_dict(records)yd_var[row_count]len(df)多页表格合并采集defscrape_multi_page_table(base_url,max_pages10):采集多页表格数据all_data[]forpageinrange(1,max_pages1):urlf{base_url}?page{page}responserequests.get(url,headersheaders,timeout10)dfextract_table_with_merged_cells(response.text)ifdf.empty:print(f第{page}页无数据停止)breakall_data.append(df)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4d47cc3155c841fdb7b7fcd233e88c3c.png#pic_center)print(f第{page}页采集{len(df)}行)# 影刀中可用【等待元素出现】检查是否有下一页按钮# 如果没有下一页则break# 合并所有页resultpd.concat(all_data,ignore_indexTrue)returnresult# 使用resultscrape_multi_page_table(https://example.com/report,max_pages20)result.to_excel(rC:\Data\all_pages.xlsx,indexFalse)有什么坑坑1表头多行合并导致列名丢失有些表格表头有2-3行第一行是分类合并单元格第二行才是具体列名# 问题pandas.read_html默认只取第一行做表头dfpd.read_html(html)[0]# 列名是分类名而不是具体字段名# 解决指定header行dfpd.read_html(html,header1)[0]# 用第二行做表头![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/463ec3449c0344968e0f8e984a9fdc0d.png#pic_center)# 或者自定义表头dfpd.read_html(html,headerNone)[0]df.columns[日期,地区,产品,数量,金额]# 手动指定坑2rowspan导致数据错位一个单元格rowspan3占了3行但后面的行少了一个td直接遍历td会错位TEMU店群矩阵自动化运营核价报活动# 问题直接遍历td数量不一致forrowinrows:cellsrow.find_all(td)# 第一行5个td第二行可能只有4个因为被上面的rowspan占了![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/312ed171dd3f44648e7ca2dcac3e834b.png#pic_center)# 解决用上面的矩阵填充法先初始化空矩阵# 然后跳过已被占用的位置# 参见上面的extract_table_with_merged_cells函数坑3表格在iframe里# 问题requests获取的HTML里没有表格因为表格在iframe里responserequests.get(url)# response.text里找不到table# 解决先找到iframe的src再请求iframe的URLsoupBeautifulSoup(response.text,html.parser)iframesoup.find(iframe)ififrame:iframe_urliframe.get(src)ifnotiframe_url.startswith(http):iframe_urlrequests.compat.urljoin(url,iframe_url)iframe_responserequests.get(iframe_url,headersheaders)# 在iframe_response.text里找表格坑4动态加载的表格表格数据通过AJAX加载requests获取的HTML是空的# 解决1找到AJAX接口直接请求# 在浏览器F12 → Network → XHR中找到数据接口api_urlhttps://example.com/api/table_data?page1responserequests.get(api_url,headersheaders)dataresponse.json()dfpd.DataFrame(data[rows])# 解决2用影刀的浏览器自动化# 【打开网页】→ 【等待元素出现】表格 → 【获取网页源代码】→ 解析坑5表格内嵌格式干扰单元格里有、等标签导致文本混乱# 问题get_text()把所有文字连在一起没有分隔cell.get_text()# 张三经理13800138000# 解决用分隔符cell.get_text(separator ,stripTrue)# 张三 经理 13800138000# 或者更精细地提取forbrincell.find_all(br):br.replace_with(\n)textcell.get_text(stripTrue)# 张三\n经理\n13800138000

相关新闻

商场裸眼3D互动开发:3ds Max与Unity全流程实战指南

商场裸眼3D互动开发:3ds Max与Unity全流程实战指南

1. 项目概述:商场大屏裸眼3D互动到底是什么? 最近几年,如果你逛过一些大型商场或者商业综合体,大概率会看到一些让人眼前一亮的“黑科技”。比如,一块巨大的LED屏幕上,一条鲸鱼仿佛要冲破屏幕,向…

2026/9/17 17:55:54 阅读更多 →
肌电数据处理实战05:真实髋伸展训练sEMG的多肌肉协同分析

肌电数据处理实战05:真实髋伸展训练sEMG的多肌肉协同分析

前 4 个案例已经完成了肌电入门中非常重要的几步:从最基础的公开 EMG 读取、滤波、整流、包络,到活动段检测、时频图、机器学习分类,再到真实手部抓握数据中的双通道协同和重复动作趋势分析。到了第 5 个案例,我们继续往前走一步:不再只看一条肌电信号,也不只比较几个孤立…

2026/9/24 15:34:11 阅读更多 →
嵌入式驱动开发实战:SysTick、Timer与UART核心原理与TI ROM库应用

嵌入式驱动开发实战:SysTick、Timer与UART核心原理与TI ROM库应用

1. 嵌入式外设驱动开发的核心价值与挑战在嵌入式开发这个行当里摸爬滚打了十几年,我越来越觉得,能把芯片数据手册上那些冷冰冰的寄存器描述,变成一行行稳定、高效、可维护的驱动代码,是区分“码农”和“工程师”的一道分水岭。很多…

2026/9/23 19:32:26 阅读更多 →

最新新闻

(全新整理)上市公司-杠杆操纵程度数据(2003-2024年)本数据包含原始数据、参考文献、代码、最终结果。

(全新整理)上市公司-杠杆操纵程度数据(2003-2024年)本数据包含原始数据、参考文献、代码、最终结果。

文章目录资料下载地址介绍01、数据简介02、相关数据03、数据截图项目备注资料下载地址资料下载地址 点击这里下载资料 介绍 01、数据简介 参考许晓芳和陆正飞等做法计算企业杠杆操纵程度,包含以下六个指标结果,指标值越大企业杠杆操纵程度越大&#…

2026/9/24 15:33:49 阅读更多 →
RC522读卡距离总是不行?天线匹配才是硬核,从2cm到4cm的实操指南

RC522读卡距离总是不行?天线匹配才是硬核,从2cm到4cm的实操指南

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

2026/9/24 15:33:49 阅读更多 →
(全新整理)顶刊复现31省份区域制度环境数据1998-2022年

(全新整理)顶刊复现31省份区域制度环境数据1998-2022年

文章目录资料下载地址介绍02、数据指标项目备注资料下载地址资料下载地址 点击这里下载资料 介绍 01、数据介绍 本研究参考 Shi 等人(2017)提出的省级制度脆弱性测量方式,选取樊纲市场化指数中的五项关键指标—政府与市场的关系指数、非国…

2026/9/24 15:33:49 阅读更多 →
swagger-codegen 生成的 Java okhttp-gson 客户端 StoreApi 实战指南:Petstore 订单与库存接口的调用与源码解析

swagger-codegen 生成的 Java okhttp-gson 客户端 StoreApi 实战指南:Petstore 订单与库存接口的调用与源码解析

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

2026/9/24 15:33:49 阅读更多 →
(全新整理)地级市气候风险关注度2003-2025年

(全新整理)地级市气候风险关注度2003-2025年

文章目录资料下载地址介绍01、数据介绍02、数据指标与参考文献03、数据截图项目备注资料下载地址资料下载地址 点击这里下载资料 介绍 01、数据介绍 参考刘澜飚等人文献,通过文本分析来测算地级市的政府气候风险关注度,对气候风险相关的关键词出现频…

2026/9/24 15:33:49 阅读更多 →
Pixy学习控制台:HUB75点阵屏驱动与ESP32-S3实战

Pixy学习控制台:HUB75点阵屏驱动与ESP32-S3实战

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

2026/9/24 15:32:48 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

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

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

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

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

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

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

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →