通过Google Apps Script从SimilarWeb提取多维度数据至Google Sheets的问题
问题描述
我需要获取Zalando等网站的以下数据:
- Total Visits(总访问量)
- Bounce Rate(跳出率)
- Pages Per Visit(每次访问页数)
- Avg Visit Duration(平均访问时长)
- Age Distribution(年龄分布)
- Gender Distribution(性别分布)
- Marketing Channels Distribution(营销渠道分布)
目前使用的Google Apps Script代码仅能正确返回Total Visits数据,其余指标数据不准确,且未覆盖全部所需指标。尝试过ChatGPT 3.5但未解决问题。
function gatherSimilarWebData() { var sheet = SpreadsheetApp.getActiveSheet(); var websites = ['zalando.com']; var startRow = 2; var metrics = ['Total Visits', 'Bounce Rate', 'Pages/Session']; for (var i = 0; i < websites.length; i++) { var website = websites[i]; var metricsData = []; for (var j = 0; j < metrics.length; j++) { var metric = metrics[j]; var url = 'https://www.similarweb.com/website/' + website + '/#overview/' + metric.toLowerCase().replace(/ /g, '-'); var response = UrlFetchApp.fetch(url); var html = response.getContentText(); var metricData = null; try { metricData = html.match(/"value":([^,}]+)/)[1]; } catch (e) { Logger.log("Error getting metric data for " + metric + " on " + website + ": " + e); } metricsData.push(metricData); } var row = startRow + i; sheet.getRange(row, 1).setValue(website); for (var k = 0; k < metricsData.length; k++) { sheet.getRange(row, k + 2).setValue(metricsData[k]); } } }
可行解决方案
1. 使用SimilarWeb官方API
SimilarWeb提供官方API,支持获取所有你需要的指标,包括受众人口统计(年龄、性别)和营销渠道数据:
- 数据来自官方接口,无需依赖页面结构变化,准确性和稳定性有保障
- 支持批量获取多网站的多维度数据
- 可直接获取结构化JSON格式数据,无需手动解析HTML
2. 优化HTML解析逻辑(非官方,稳定性差)
如果暂时不使用API,需针对不同指标调整解析规则:
- 不同指标在页面中的存储结构不同,需为每个指标编写单独的匹配规则,比如跳出率、访问时长可能不在
"value"字段中,需定位到对应的JSON节点或HTML标签 - 注意SimilarWeb部分数据是动态加载的,UrlFetchApp仅能获取初始HTML,动态数据需要模拟浏览器渲染(可结合Puppeteer,但Google Apps Script不直接支持,需部署外部服务)
- 先提取页面中包含所有指标的完整JSON块,再从中精准提取对应字段,比单一正则匹配更可靠
3. 应对反爬机制
SimilarWeb会拦截非浏览器请求,直接用UrlFetchApp可能导致数据不全:
- 添加浏览器模拟请求头,比如设置
User-Agent为常见浏览器标识 - 控制请求频率,添加请求间隔避免触发拦截
- 部分高级指标需登录后查看,非官方方式处理登录态可能违反服务条款
内容的提问来源于stack exchange,提问作者Berke Berkan
相关产品推荐
相关产品推荐

