如何提取币安P2P页面首个价格并导入Google Sheets
失效原因
你写的两个IMPORTXML公式无法拿到数据是必然的:
- 币安P2P交易页是JavaScript客户端渲染页面,Google Sheets内置的
IMPORTXML/IMPORTHTML类函数只能抓取服务器初始返回的静态HTML源码,根本获取不到JS执行后才动态加载的交易列表数据 - 你用来定位的
css-1ee59nr类名是前端构建时生成的随机哈希值,每次币安更新前端版本就会变化,完全不具备定位稳定性 - 手写的绝对XPath完全依赖固定DOM层级,只要页面新增模块、调整布局就会直接失效
稳定实现方案
不要爬页面DOM,直接调用币安P2P的公开数据接口,通过Google Apps Script写自定义函数取数,全程不需要第三方服务,稳定性极高:
- 打开目标Google Sheets表格,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑页
- 清空编辑器里的默认示例代码,粘贴以下代码:
function GET_BINANCE_P2P_USDT_UZS_PRICE() { const endpoint = "https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search"; const requestBody = { page: 1, rows: 1, payTypes: [], asset: "USDT", fiat: "UZS", // 取值BUY对应用户买入USDT板块(页面默认展示)的商家报价,要取用户卖出USDT板块报价改为SELL即可 tradeType: "BUY", publisherType: null }; const options = { method: "post", contentType: "application/json", payload: JSON.stringify(requestBody), muteHttpExceptions: true }; try { const response = UrlFetchApp.fetch(endpoint, options); const result = JSON.parse(response.getContentText()); if (result.code === "000000" && result.data.length) { return Number(result.data[0].adv.price); } return "接口返回异常"; } catch (err) { return `请求失败:${err.message}`; } }
- 点击编辑器顶部的保存按钮,给项目任意命名后完成保存,第一次运行时按提示完成Google账号授权(这是你个人账号下的私有脚本,所有数据只会存在你自己的表格和脚本里,不会上传到第三方)
- 回到表格页面,在需要展示价格的单元格输入公式
=GET_BINANCE_P2P_USDT_UZS_PRICE(),回车即可拿到最新的首个挂牌价格
可选优化
如果需要价格自动刷新,不需要手动重新运行公式:在Apps Script编辑器左侧边栏找到「触发器」选项,新增时间驱动触发器,绑定刚才写的函数,设置你需要的刷新间隔(最短支持1分钟刷新一次)即可。
这个方案完全不依赖页面DOM结构,不会因为币安前端改版、类名变化、布局调整失效,比爬页面的方案维护成本低90%以上。
内容的提问来源于stack exchange,提问作者Роберт Гумеров
相关产品推荐
相关产品推荐

