在Google Sheets中使用IMPORTXML无法获取啤酒菜单内容求助
解决Google Sheets IMPORTXML无法抓取Untappd啤酒菜单的问题
问题原因
Untappd的啤酒菜单内容是JavaScript动态渲染的,Google Sheets的IMPORTXML只能解析页面加载时的静态HTML代码,无法获取JS运行后生成的动态内容,这就是你遇到“无法获取URL”或抓不到目标内容的核心原因。
可行解决方案
方案1:用Google Apps Script抓取动态内容
Google Apps Script可以自定义请求头模拟浏览器访问,获取完整的渲染后页面内容,再解析目标元素。步骤如下:
- 打开你的Google Sheets,点击顶部菜单「扩展程序」→「Apps Script」
- 删除默认代码,粘贴以下脚本:
function getBeerMenu() { // 目标页面URL var targetUrl = "https://untappd.com/v/titans-craft-beer-bar-and-bottle-shop/5286704"; // 模拟浏览器请求头,避免被网站拦截 var requestOptions = { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } }; try { // 获取页面内容 var response = UrlFetchApp.fetch(targetUrl, requestOptions); var pageHtml = response.getContentText(); // 提取ul.menu-section-list下的所有li内容并清理HTML标签 var menuSectionMatch = pageHtml.match(/<ul class="menu-section-list">(.*?)<\/ul>/s); if (menuSectionMatch) { var liItems = menuSectionMatch[1].match(/<li>(.*?)<\/li>/g); if (liItems) { // 清理每个li的HTML标签,只保留文本 var cleanItems = liItems.map(function(item) { return [item.replace(/<[^>]+>/g, '').trim()]; }); // 将结果写入当前工作表的A列(从A1开始) var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); activeSheet.getRange(1, 1, cleanItems.length, 1).setValues(cleanItems); } } } catch (error) { Logger.log("抓取出错:" + error.toString()); SpreadsheetApp.getUi().alert("抓取失败,请检查URL或网络连接"); } }
- 点击脚本编辑器的「运行」按钮,首次运行需要授权(按照提示完成Google账号授权)
- 回到Google Sheets,就能看到A列已经填充了目标啤酒菜单的所有
- 内容
方案2:使用第三方网页抓取工具
如果不想写代码,可以用ParseHub、Octoparse这类可视化抓取工具:
- 这类工具支持处理JS动态加载的内容,只需简单配置选择目标元素(
ul.menu-section-list下的 - )
- 抓取完成后导出为CSV文件,再导入到Google Sheets中即可
注意事项
- 抓取前请遵守Untappd的网站使用条款,避免频繁发送请求导致IP被封禁
- 如果脚本运行失败,可尝试更换
User-Agent值(找一个最新的浏览器请求头)
内容的提问来源于stack exchange,提问作者casual coding and beers
相关产品推荐
相关产品推荐

