Google Sheets脚本无法从Bricklink抓取均价问题求助
排查Bricklink均价抓取正则匹配失败问题
1. 确认页面内容获取有效性
- 用
Logger.log()输出完整抓取的HTML内容,对比浏览器中查看的页面源码。Bricklink可能对非浏览器请求返回不同内容(如反爬拦截、动态渲染数据),若静态HTML中没有目标均价,正则自然无法匹配。 - 若均价是通过JavaScript异步加载的,
UrlFetchApp.fetch()仅能获取静态HTML,需改用接口调用方式获取数据。
2. 适配实际HTML结构调整正则
- 即使测试网站正则有效,也要确认实际抓取的HTML中价格的原始格式:比如是否被特定标签包裹、是否存在额外空格或隐藏字符。例如目标价格可能是
<span class="avg-price">12,438.02 HUF</span>,正则需适配该结构。 - 针对匈牙利福林格式,可尝试精准正则(需根据实际HTML调整):
const priceRegex = /(\d{1,3}(?:,\d{3})*\.\d{2}) HUF/; - 开启单行模式(
s修饰符)让.匹配换行符,避免HTML换行导致匹配中断:const priceMatch = html.match(/(\d{1,3}(?:,\d{3})*\.\d{2}) HUF/s);
3. 分步验证匹配逻辑
- 先定位到新品近6个月均价的目标区域,再在该区域内匹配价格,缩小匹配范围提升准确性:
const html = UrlFetchApp.fetch(url, {headers: {"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"}}).getContentText(); // 替换成实际的目标区域选择器对应的正则 const sectionMatch = html.match(/<div class="new-6month-avg">(.*?)<\/div>/s); if (sectionMatch) { const priceMatch = sectionMatch[1].match(/(\d{1,3}(?:,\d{3})*\.\d{2})/); Logger.log(priceMatch ? `匹配到价格:${priceMatch[1]}` : "区域内无匹配价格"); } else { Logger.log("未找到目标均价区域"); }
4. 检查请求头配置
- 添加模拟浏览器的请求头,避免被Bricklink识别为非合法请求:
const fetchOptions = { headers: { "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", "Accept-Language": "hu-HU,hu;q=0.9" } }; const html = UrlFetchApp.fetch(targetUrl, fetchOptions).getContentText();
5. 确认数据加载方式
- 手动查看Bricklink页面的开发者工具(F12):若均价数据是通过XHR请求加载的,直接调用对应接口获取JSON数据,比解析HTML更稳定可靠。
内容的提问来源于stack exchange,提问作者Ben Sword
相关产品推荐
相关产品推荐

