如何批量导入foreclosureindia.com多页数据至Excel/Google Sheets单工作表
批量导入多页银行拍卖数据到Excel/Google Sheets
Google Sheets 解决方案(基于Apps Script)
- 打开你的Google Sheets文件,点击顶部菜单栏「扩展程序」>「Apps Script」
- 清空默认代码,粘贴以下脚本:
function importForeclosureData() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clearContents(); // 可选:清空现有内容,按需调整 // 写入表头(可根据网页实际列名修改) const headers = ['拍卖编号', '银行名称', '抵押物类型', '位置', '保留价', '拍卖日期']; sheet.getRange(1, 1, 1, headers.length).setValues([headers]); const baseUrl = "https://foreclosureindia.com/bank-auctions/visakhapatnam/"; const totalPages = 100; // 替换为实际总页数 let row = 2; // 从第二行开始写入数据 for (let page = 1; page <= totalPages; page++) { const url = baseUrl + page; const response = UrlFetchApp.fetch(url); const html = response.getContentText(); // 解析HTML提取表格数据(需根据网页实际结构调整标签逻辑) const doc = XmlService.parse(html); const root = doc.getRootElement(); const tableRows = root.getDescendants().filter(elem => elem.asElement() && elem.asElement().getTagName() === 'tr'); tableRows.forEach((tr, index) => { if (index === 0) return; // 跳过网页自带的表头行 const cells = tr.getDescendants().filter(elem => elem.asElement() && elem.asElement().getTagName() === 'td'); const rowData = cells.map(cell => cell.asElement().getText().trim()); if (rowData.length > 0) { sheet.getRange(row, 1, 1, rowData.length).setValues([rowData]); row++; } }); // 避免请求过于频繁触发网站限制 Utilities.sleep(1000); } SpreadsheetApp.getUi().alert("数据导入完成!"); }
- 点击「保存」,给项目命名(比如
ForeclosureDataImporter) - 点击运行按钮,首次运行需完成权限授权,按提示操作即可
- 等待脚本执行完毕,数据会自动写入当前工作表
提示:若XmlService解析HTML报错,可改用
Cheerio库(需在Apps Script中添加库),或用正则表达式提取数据,具体需匹配网页的实际DOM结构。
Excel 解决方案(基于Power Query)
- 打开Excel,点击「数据」选项卡>「获取数据」>「自其他来源」>「自Web」
- 输入第一页URL:
https://foreclosureindia.com/bank-auctions/visakhapatnam/1,点击确定 - 在Power Query编辑器中,加载网页表格并完成基础清洗(删除冗余行、设置列类型等)
- 点击「主页」>「高级编辑器」,替换现有M代码为以下内容:
let totalPages = 100, // 替换为实际总页数 baseUrl = "https://foreclosureindia.com/bank-auctions/visakhapatnam/", // 生成所有页面URL列表 pageUrls = List.Generate( () => [Page=1, Url=baseUrl & "1"], each [Page] <= totalPages, each [Page=[Page]+1, Url=baseUrl & Text.From([Page]+1)], each [Url] ), // 批量抓取每页数据 fetchPages = List.Transform(pageUrls, (url) => let Source = Web.Page(Web.Contents(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"]])), Data0 = Source{0}[Data], CleanedData = Table.Skip(Data0, 1) // 跳过网页表头行,按需调整 in CleanedData ), // 合并所有页面数据 combinedData = Table.Combine(fetchPages), // 设置表头 setHeaders = Table.PromoteHeaders(combinedData, [PromoteAllScalars=true]) in setHeaders
- 点击「完成」,数据将加载到Excel工作表中
提示:若网站有反爬限制,可调整
User-Agent参数模拟不同浏览器请求,或增加请求间隔。
内容的提问来源于stack exchange,提问作者Imtiaz Public
相关产品推荐
相关产品推荐

