Google Ads脚本使用Regex统计爬取页面HTML片段出现次数咨询
修改后的完整脚本
场景1:需要统计messagesToCheckFor中所有HTML片段的总出现次数
// 初始化结果二维数组,结构可直接适配Google Sheet的setValues方法写入 var urlMatchCount = []; for(var x in urls){ var response = UrlFetchApp.fetch(urls[x], urlFetchOptions); var code = response.getContentText(); var totalCount = 0; // 遍历所有待检测的HTML片段 for(var y = 0; y < messagesToCheckFor.length; y++){ var message = messagesToCheckFor[y]; // 转义HTML片段中的正则特殊字符,避免元字符导致匹配异常 var escapedMessage = message.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); var re = new RegExp(escapedMessage, 'g'); var singleCount = 0; while(re.exec(code)){ singleCount++; } totalCount += singleCount; } // 存入URL和对应总匹配次数 urlMatchCount.push([urls[x], totalCount]); }
场景2:仅需要统计单个固定正则的匹配次数(如你示例的dpb-product-link类名)
var urlMatchCount = []; var re = /dpb-product-link svelte-1yex87k/g; for(var x in urls){ var response = UrlFetchApp.fetch(urls[x], urlFetchOptions); var code = response.getContentText(); var count = 0; // 重置正则的lastIndex,避免上一次匹配的缓存影响本次计数 re.lastIndex = 0; while(re.exec(code)){ count++; } urlMatchCount.push([urls[x], count]); }
关键逻辑说明
- 最终输出的
urlMatchCount是二维数组,每一项对应Google Sheet的一行数据,第一列为URL,第二列为匹配次数,可直接调用sheet的setValues(urlMatchCount)完成写入。 - 注意:全局正则自带
lastIndex属性,每次完成匹配后会记录下一次匹配的起始偏移量,因此处理新URL前必须手动重置为0,否则会出现计数错误甚至漏匹配的问题。 - 如果你不需要统计所有片段的总次数,而是要分别输出每个片段的匹配次数,只需调整存入数组的结构,把每个片段的单独计数作为单独列插入数组即可。
内容的提问来源于stack exchange,提问作者zjcannon
相关产品推荐
相关产品推荐

