如何在Cheeriogs中使用contains匹配href实现稳定的URL抓取
错误原因
你使用的:contains()是文本匹配选择器,仅用于筛选元素内部文本包含指定内容的节点,不能用于匹配href等属性的值,所以写法不生效。
正确实现方法
推荐方案:属性前缀匹配选择器
你要匹配href以/en/predictions-tips开头的a标签,直接用CSS属性前缀匹配语法[attr^=value]即可,该语法在Cheeriogs中完全兼容,且匹配精度更高,同时可以去掉冗余的DOM层级依赖,进一步提升稳定性。
修改后的代码如下:
const contentText = UrlFetchApp.fetch(url).getContentText(); const $ = Cheerio.load(contentText); // 仅通过class和href规则匹配,不依赖DOM层级结构 const targetLink = $('a.tnmscn[href^="/en/predictions-tips"]'); const matchedHref = targetLink.attr('href').trim(); Logger.log(matchedHref);
如果需要保留原有层级做范围限定,可将选择器调整为如下写法,去掉了严格的直接子元素匹配符>,降低DOM结构微调带来的失效风险:
div.schema div.tnms a.tnmscn[href^="/en/predictions-tips"]
扩展方案:自定义规则过滤
如果后续需要更复杂的href匹配逻辑(比如正则校验),可以用filter方法实现:
const targetLink = $('a.tnmscn').filter(function() { return $(this).attr('href')?.startsWith('/en/predictions-tips') })
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

