巧用正则获取html页面信息

2022-08-22 10:41:17 浏览数 (1)

工作中需要获取html网页的部分信息,而通过掌握html网页结构来获取某元素的信息是有一定难度的,只能另辟蹊径来解决。

通过查看html网页,需要获取的关键信息是一个表格的某一列,按 F12 查看,关键信息存储在一个多层的 list 中,其存储样式遵循一定的规律,这不就是正则擅长的工作吗?哈哈哈,瞬间有了方向。

代码这种东西,一不用就会忘记,还好我有记录,再翻开之前写的文章来学习下正则:#Python正则从入门到实践

对比html网页和F12信息,可以看到关键信息 application_1642534673102_0995 ,此文本包含了 字母、数字和 _ ,可以使用 `` 进行匹配,而其全部包裹在 > </a> 中间,可以将pattern 扩充为 >(w )</a>,实际测试时发现把很多无关的内容都匹配出来了,包括 >ApplicationMaster</a> 中的 ApplicationMaster ,仔细查看F12信息发现:> </a> 是html中很常见的标签,所以把pattern修改为 >(application_w )</a> 实现精准匹配。

按照这个思路,监控脚本就上线了,周例会讨论时,有人提出,关注 Apache Flink 类型的任务就可以了,不需要获取全部的 application id。这带来了新的挑战,需要再加一次过滤,也就是增加一次正则匹配。

查看F12返回信息可以发现,有关 Apache Flink 的描述信息就在 application id 的后面,可以先匹配 application id Apache Flink 的分段报文(匹配的同时实现过滤),再去匹配 application id

有了第一次的尝试,第二次就变得水到渠成。

代码语言:javascript复制
regex1 = re.compile(">(application_. Flink)") 
appList1 = regex1.findall(result)
#由于 re.findall 的入参是str,而出参是list,所以这里有list到str的转换
appList2 =  "n".join(appList1)
#获取 application id list
regex2 = re.compile("(w )</a>") 
appList3 = regex2.findall(appList2)

至此,问题完美解决。

0 人点赞