Google Sheets自定义函数开发:从Bricklink按零件/颜色ID抓均价
修正Google Sheets自定义函数BLprice以抓取Bricklink平均价格
原代码问题分析
- URL拼接错误:JavaScript中字符串拼接需用
+而非&,且原URL里的多余转义字符%22会导致请求地址无效,直接引发"Bad request"错误。 - 正则匹配不准确:原正则无法精准定位"全新"状态的6个月平均价格,且未处理匹配失败的情况,容易触发报错。
- 反爬拦截:Bricklink会拦截无浏览器标识的请求,直接用
UrlFetchApp.fetch()会被拒绝访问。
修正后的代码
function BLprice(PartID, ColorID) { // 正确拼接目标URL const url = `https://www.bricklink.com/catalogPG.asp?P=${PartID}&ColorID=${ColorID}`; // 设置请求头模拟浏览器访问,避免反爬拦截 const options = { 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' } }; try { const html = UrlFetchApp.fetch(url, options).getContentText(); // 精准匹配"全新"状态下的6个月平均价格(适配Bricklink页面结构) const priceMatch = html.match(/New<\/td>.*?6\sMonths<\/td>.*?<td[^>]*>(\$[\d\.]+)<\/td>/); // 若匹配成功返回价格,否则返回提示信息 return priceMatch ? priceMatch[1].trim() : "未找到对应价格"; } catch (error) { // 捕获请求或解析错误,返回友好提示 return `请求错误: ${error.message}`; } }
关键修改说明
- URL拼接:使用模板字符串(反引号
`)简化拼接,确保PartID和ColorID正确传入URL参数。 - 请求头设置:添加
User-Agent模拟浏览器请求,绕过Bricklink的基础反爬机制。 - 正则优化:调整正则表达式,精准定位"New"(全新)列下的6个月平均价格单元格,避免匹配无关内容。
- 错误处理:用
try-catch包裹请求和解析逻辑,避免函数因请求失败或匹配不到内容而直接报错,返回友好提示。
内容的提问来源于stack exchange,提问作者Brett Gonser
相关产品推荐
相关产品推荐

