当前位置: 首页 > 科技观察

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

时间:2023-03-21 02:06:25 科技观察

GNE[1]在预处理新闻时会提前去除一些明显不能包含文本的Dom节点,从而提高抽取的准确率。一般来说,网页的版权信息和页脚信息都会放在一个叫做

的标签中。因此,用XPath查找此版权信息应该非常简单://div[@class="footer"]。但在实际场景中,可能有两种情况:
。当页脚前后有字符时,我们可以使用XPath关键字contains://div[contains(@class,"footer")],运行效果如下图所示:但是如果我们想忽略大小写么?事实上,在XPath2.0标准中,有一个叫做lower-case的关键字可以满足这个要求。XPath写成://div[lower-case(@class)="footer"]/text()。我们可以在一些在线的XPath检查工具中看到提取效果,如下图所示:但是不好的是Python的第三方库lxml使用的是XPath1.0标准,所以没有小写关键字。所以要实现这个需求,我们需要使用另一个关键字translate://div[translate(@class,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")="footer"]/text()。运行效果如下图所示:这里的翻译效果类似于Python字符串的翻译。之前写过一篇文章:一日一技:批量替换字符串中的单个字符,介绍了如何使用Python中的translate方法。XPath中translate的语法是:translate(目标属性,要替换的字符,要替换的字符)。这样就可以将节点的目标属性值转为小写再进行比较。那么,如果HTML标签的属性值为xxxFooteryyy呢?其实我们还可以再嵌一层containslike函数嵌套://div[contains(translate(@class,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz"),"footer")]运行效果如下图所示:参考文献[1]GNE:https://github.com/GeneralNewsExtractor/GeneralNewsExtractor本文转载自微信公众号“闻所未闻的密码”,可通过以下二维码关注。转载本文请联系Code公众号。