如何使用IMPORTXML公式实现多页网页数据抓取?
用IMPORTXML批量抓取多页数据的方法
Google Sheets的IMPORTXML本身无法自动遍历多页,但可以通过以下两种方式实现批量抓取:
方法一:数组公式+页码序列拼接
先获取总页数
在空白单元格输入公式,抓取目标页面的总页数(需根据网站分页元素调整XPath):=MAX(IMPORTXML("https://cars.av.by/filter?brands[0][brand]=6&brands[0][model]=1992&year[min]=2010&year[max]=2018","//*[@class='pagination__item']/text()"))执行后会得到结果总页数,比如假设为5。
生成多页抓取公式
用SEQUENCE生成1到总页数的序列,结合ARRAYFORMULA和IMPORTXML批量抓取所有页面:=FLATTEN(ARRAYFORMULA(IMPORTXML("https://cars.av.by/filter?brands[0][brand]=6&brands[0][model]=1992&year[min]=2010&year[max]=2018&page="&SEQUENCE(5),"//main//h3/a")))把公式里的
5替换为刚才获取的总页数即可。
方法二:自定义脚本函数(适合复杂场景)
如果数组公式触发网站反爬或受限,可通过Google Apps Script编写自定义函数:
- 打开Google Sheets,点击「扩展程序」→「Apps脚本」。
- 清空默认代码,粘贴以下脚本:
function IMPORTXMLALL(baseUrl, xpath, maxPages) { let results = []; for (let pageNum = 1; pageNum <= maxPages; pageNum++) { let fullUrl = `${baseUrl}&page=${pageNum}`; try { let response = UrlFetchApp.fetch(fullUrl); let doc = XmlService.parse(response.getContentText()); let nodes = XmlService.getNamespaceManager().evaluate(xpath, doc.getRootElement(), true); nodes.forEach(node => results.push(node.getValue())); } catch (e) { results.push(`抓取第${pageNum}页失败: ${e.message}`); } } return results; } - 保存脚本后回到表格,在单元格调用:
=FLATTEN(IMPORTXMLALL("https://cars.av.by/filter?brands[0][brand]=6&brands[0][model]=1992&year[min]=2010&year[max]=2018","//main//h3/a",5))
注意事项
- 部分网站有反爬机制,频繁抓取可能被限制访问,建议控制抓取频率。
- 若网站分页规则不是
page=参数,需先确认分页链接格式再调整公式。 - 总页数若动态变化,需定期更新公式里的页数数值或自动抓取最新总页数。
内容的提问来源于stack exchange,提问作者Andrei Rusak
相关产品推荐
相关产品推荐

