c#datatable 嵌套_云扩RPA流程开发课堂 | 如何获取Web端多层嵌套table中的数据

点击蓝字

关注云扩科技官方微信

大家好,很高兴这次跟大家进行分享web页面表格操作方面的小技巧。 我们在流程开发中往往会遇到web页面的很多table类元素进行处理的问题,一般我们在网页上需要获取的table(例如n*m类型)表格时,我们可以很方便地借助IDE中的 【获取结构化数据】 组件来实现table获取。 但是我们也会遇到多层table嵌套导致无法一次性获取整个table然后进行数据处理的情况,下面我们将对这种情况进行探讨。 准备工作:     1.准备开发流程的电脑,请打开云扩学院链接查看云扩RPA编辑器运行的硬件&软件要求     2.打开云扩官网下载编辑器并安装。     3.准备流程所需要用到的数据。 本次课程介绍: 用云扩RPA来进行多层table嵌套的web表格处理,表格举例如下: 34d6ab9409350abc333ec30495827756.png 网页源码: 5f4598062c595c218c0cce7b75aa38e3.png
表格标签
测试编号 测试内容 备注                           测试编号0001 测试苏州-上海 测试01-01-1测试01-01-2测试01-01-3测试01-01-4测试01-01-5测试上海-苏州 测试01-02-1测试01-02-2 测试编号0002 测试苏州-杭州 测试02-01-1测试02-01-2测试02-01-3    
在上述例子中,假设我们需要获取网页中这个表格的最后一列,如果我们使用【获取结构化数据】组件来处理,则无法实现整个table数据的正常获取,此时我们就可以使用如下思路来解决问题。 流程示意图 9c01f1796b1cc82f2225525be0c82c2f.png 流程开发步骤: 1. 打开云扩编辑器,新建项目: d4a74cae964211119654925cb679ba96.png 2. 添加【打开浏览器】组件,配置需要处理的网页URL: 91ae64e8ac9e4f0482836628675a3d1c.png 3. 添加【获取元素】组件,获取整个table最外层元素信息: 72fcc9d18fe060b634ff35a9f299d7e4.png bedb7d391d3f501d38a268786f656730.png b2afad8d70684449972443b89b024eb6.png 4. 将获取元素的输出结果赋值给新变量h(选中变量h,按Ctrl+B可以快速自动创建变量h): 0911bf88c7851fa03126099f82bffa84.png 5. 为了更明显地展示从web端获取的数据,这里新建一个datatable,配置一个列(string类型,我们假设只需要获取网页中一列数据),来接收网页table获取的所有结果: ced981b2f9661905f11dee26e9c8c98f.png ef5494179dec44e74c5e6fc31aefc164.png 1e91b18c65d005e29840134232727ebd.png 6. 通过C#代码来处理获取table的元素(即变量h):
try{// 使用Html Agility Pack开源组件来进行Html解析string htmlCode = (h.GetProperty("innerHTML")).ToString();  HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();  doc.LoadHtml(htmlCode);// 遍历需要获取的信息的节点  // 此处的SelectNodes中Xpath为页面获取元素的这段源码中,需要获取的节点信息的xpath路径  // 请实际使用中用谷歌F12+ Ctrl + F在最下面的输入框中进行调试  foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table//table//table//tr"))   {  //将节点信息添加到数组中string[] tdArr = row.SelectNodes("td").Select(td => td.InnerText).ToArray();// 通过判断条件进行数据信息筛选,此处我们假设我们需要筛选数据内容是字符"2"结尾的内容if (Convert.ToInt32(tdArr[0].Substring(tdArr[0].Length - 1)) == 2)    {// 将筛选内容添加到datatable中    table.Rows.Add(tdArr);    }      }}  catch(System.Exception e){  Console.WriteLine(e.Message.ToString());}
45dc6fd8209001a6fa1d52be39def9b4.png 7. 我们使用组件【预览数据表】来查看处理结果: f8c6f59f0432cc632b6578c08c991626.png 至此,从多层嵌套的table中获取不固定数据的流程已开发完成,保存并运行,执行流程并查看结果对比: 023c4e9287a6ada658dc197a3fc24c3d.png 以下为运行视频: 讨论:

1.我们看到执行过程只是简单的进行对多层table这一段源码进行遍历操作,使用的是节点筛选,当我们这里需要处理多个页面时,只要保证这个table嵌套的架构一致,那么我们网页中的节点td(也就是说最后一列的数据)可以是动态的,可以是1行数据,也可以是100行数据,我们都可以通过Xpath模糊查询的结果来进行筛选出来。

848ceb744edd211346b1d93734d18e5a.png 2. 综合观点1,我们可以发散,这不仅仅是table可以这样操作,我们这个html的思路,可以使用到任何html页面中想爬取的类似结构,例如下图中情况: 35431c9da3a90e1177cdac6d06b4afaf.png 好了各位,今天的课程就到此结束,希望大家在遇到类似场景时可以应用本课内容解决问题,同时也欢迎各位留言一起讨论不同的解决方案~ END 上海云扩信息科技有限公司是全球RPA领域的创新领军者。公司以自研的云扩RPA平台为核心,致力于为各行业客户提供智能的RPA机器人产品与解决方案,通过RPA赋能,持续为客户创造价值,助力企业推进数字化转型。 ba0ebc45139b90417cce29aad979549b.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值