工作中需要获取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)
至此,问题完美解决。