一日一技:XPath 匹配如何忽略大小写?

简介: 一日一技:XPath 匹配如何忽略大小写?

GNE[1]在对新闻进行预处理的时候,会提前移除一些显然不可能包含正文的 Dom 节点,从而增加提取的准确性。


一般来说,网页的版权信息,页尾信息,会放在一个叫做<div class="footer"></div>的标签里面。所以,要用 XPath 找到这种版权信息,本来应该非常简单://div[@class="footer"]。但实际场景中,可能有两种情况:<div class="xxxfooteryyy"></div><div class="Footer">


footer前后都有字符的时候,我们可以使用 XPath 的关键词contains//div[contains(@class, "footer")],运行效果如下图所示:


1.png


但如果我们想忽略大小写的时候怎么办呢?实际上,在 XPath 2.0的标准里面,有一个关键字叫做lower-case就可以实现这个需求,XPath 写为: //div[lower-

case(@class)="footer"]/text()。我们可以在一些在线 XPath 检查的工具里面看到提取效果,如下图所示:


2.png


但坏就坏在,Python 的第三方库lxml使用的是 XPath 1.0标准,因此没有lower-case这个关键字。所以要实现这个需求,我们需要使用另一个关键字

translate//div[translate(@class, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")="footer"]/text()


运行效果如下图所示:


3.png


这里的translate效果就跟 Python 字符串的translate差不多。我以前写过一篇文章:一日一技:在字符串中批量替换单个字符介绍在 Python 里面怎么使用translate方法。


XPath 的translate的语法为:translate(目标属性, 需要替换的字符, 替换成字符)。这样就可以把节点的目标属性值转成小写再来对比。


那么,如果HTML 标签的属性值是xxxFooteryyy怎么办呢?其实我们也可以像函数嵌套一样再套一层contains//div[contains(translate(@class, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"), "footer")]


运行效果如下图所示:


4.png



参考文献


[1]GNE: https://github.com/GeneralNewsExtractor/GeneralNewsExtractor


请关注微信公众号【未闻Code】获取更多精彩文章。


目录
相关文章
|
7月前
|
Java
正则表达式匹配数字的几种方法比较
正则表达式匹配数字的几种方法比较
|
8月前
|
人工智能 JavaScript
js正则表达式new RegExp(表达式, “gi“)不区分大小写、忽略大小写匹配替换字符
js正则表达式new RegExp(表达式, “gi“)不区分大小写、忽略大小写匹配替换字符
忽略大小写比较字符串大小
一般我们用 strcmpstrcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0 为止。 如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。 但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hello 和 hello 在忽略字母大小写时是相等的。 请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
329 0
|
C++
正则表达式 - 匹配任何字符(包括换行符)
正则表达式 - 匹配任何字符(包括换行符)
571 0
【正则】至少包括字母数字特殊字符中任意2种的正则表达式
【正则】至少包括字母数字特殊字符中任意2种的正则表达式
317 0
判断字符串是否有特殊字符和以0开头的正则表达式
判断字符串是否有特殊字符和以0开头的正则表达式
|
C#
C# -- 正则表达式匹配字符之含义
原文:C# -- 正则表达式匹配字符之含义 C#正则表达式匹配字符之含义 1.正则表达式的作用:用来描述字符串的特征。 2.各个匹配字符的含义: .   :表示除\n以外的单个字符 [ ]  :表示在字符数组[]中罗列出来的字符任意取单个 |   :表示“或”的意思 ()  :表示改变优...
1242 0
|
C#
C#正则表达式的完全匹配、部分匹配及忽略大小写的问题
原文:C#正则表达式的完全匹配、部分匹配及忽略大小写的问题 问题的提出 根据用户给定表达式,里面含有各种数学函数,如求绝对值,三角函数,平方、开方等,分别以类似ABS(表达式),Sin(表达式),ASin(表达式),POW(表达式)等形式表述。
2028 0

热门文章

最新文章