求助:Google Sheets用IMPORTHTML获取TradingView全量股票数据
解决Google Sheets一次性导入TradingView全部美股异动数据的方案
IMPORTHTML只能抓取页面初始渲染的静态内容,而TradingView的美股异动数据是通过点击「Load More」触发AJAX动态加载的,所以默认只能拿到100行。要导入全部4902行,得用Google Apps Script模拟动态请求来获取所有数据,具体步骤如下:
- 打开目标Google Sheets,点击顶部菜单栏的「扩展程序」→「Apps Script」进入脚本编辑器。
- 删除编辑器里的默认代码,粘贴以下脚本:
function importTradingViewData() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clear(); // 清空当前工作表内容(可选,根据需要调整) const baseUrl = "https://scanner.tradingview.com/america/scan"; const headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" }; let totalRows = 0; const batchSize = 100; let offset = 0; let allData = []; // 先获取表头 const firstPayload = JSON.stringify({ "filter": [], "options": {"lang": "en"}, "markets": ["america"], "symbols": {"query": {"types": ["stock"]}, "tickers": []}, "columns": ["name", "close", "change", "change_abs", "Volume", "market_cap_basic", "price_earnings_ttm", "dividend_yield", "sector", "industry"], "sort": {"sortBy": "name", "sortOrder": "asc"}, "range": [offset, offset + batchSize] }); const firstResponse = UrlFetchApp.fetch(baseUrl, { method: "post", headers: headers, payload: firstPayload, muteHttpExceptions: true }); const firstData = JSON.parse(firstResponse.getContentText()); totalRows = firstData.totalCount; allData.push(firstData.data.headers.map(header => header.name)); // 添加表头 // 循环获取所有数据 while (offset < totalRows) { const payload = JSON.stringify({ "filter": [], "options": {"lang": "en"}, "markets": ["america"], "symbols": {"query": {"types": ["stock"]}, "tickers": []}, "columns": ["name", "close", "change", "change_abs", "Volume", "market_cap_basic", "price_earnings_ttm", "dividend_yield", "sector", "industry"], "sort": {"sortBy": "name", "sortOrder": "asc"}, "range": [offset, offset + batchSize] }); const response = UrlFetchApp.fetch(baseUrl, { method: "post", headers: headers, payload: payload, muteHttpExceptions: true }); const data = JSON.parse(response.getContentText()); if (data.data.rows.length === 0) break; allData = allData.concat(data.data.rows); offset += batchSize; SpreadsheetApp.flush(); // 强制刷新,避免超时 } // 将数据写入工作表 if (allData.length > 0) { sheet.getRange(1, 1, allData.length, allData[0].length).setValues(allData); } }
- 点击脚本编辑器顶部的「保存」按钮,给脚本命名(比如「TradingViewDataImporter」)。
- 点击「运行」按钮,首次运行会弹出授权请求,按照提示完成授权(需要允许脚本访问外部API和修改你的表格)。
- 运行完成后,回到Google Sheets,就能看到全部美股异动数据被导入到当前工作表中。
注意事项
- 脚本中的
columns参数定义了要获取的字段,如果需要其他字段,可以参考TradingView页面上的列名,调整对应的参数值。 - 如果遇到请求失败,可能需要更新
User-Agent字段为当前浏览器的UA值(可以通过浏览器开发者工具查看)。 - 由于数据量较大,运行时间可能稍长,耐心等待即可。
内容的提问来源于stack exchange,提问作者rookie steve
相关产品推荐
相关产品推荐

