多URL网页抓取脚本如何使用迭代器减少重复代码(适配Google Sheets)
批量抓取迭代逻辑实现方案
你只需修改priceScraper函数即可实现批量URL自动抓取,原有getData、getItemNumber、outWithTheOldInWithTheNew函数无需改动,重复注释的多份getData代码可以直接删除。
修改后的priceScraper代码
function priceScraper() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const totalListSheet = ss.getSheetByName('TotalList'); const graingerSheet = ss.getSheetByName('Graingerscrape'); // 读取H列从第9行开始的所有URL,过滤空值 const urlRange = totalListSheet.getRange('H9:H' + totalListSheet.getLastRow()); const urls = urlRange.getValues().flat().filter(url => url.trim() !== ''); // 遍历所有URL执行抓取 for (const url of urls) { try { // 抓取价格并格式化 const price = getData(url).replace("$","").replace(/\s/g, ""); // 抓取商品编号 const itemNumber = getItemNumber(url); // 写入结果表 graingerSheet.appendRow([itemNumber, new Date(), price]); } catch (e) { // 单条URL抓取失败时输出日志,不中断整体流程 Logger.log(`URL抓取失败:${url},错误信息:${e.message}`); } } }
逻辑说明
- 一次性读取整列URL,比逐个读取单元格效率更高
- 复用原有单URL的抓取逻辑,无需重复编写功能代码
- 新增异常捕获机制,单条URL失效、网络波动等问题不会导致整个脚本终止
- 后续新增待抓取商品,只需把URL追加到
TotalList表H列的末尾即可,无需修改任何代码
可选优化(按需使用)
如果不想每次全量抓取所有URL,可以在TotalList表新增一列标记是否已抓取,循环时跳过已标记的行即可。
内容的提问来源于stack exchange,提问作者Markus W
相关产品推荐
相关产品推荐

