You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cheerio v13无法获取美国人口普查表格数据,求技术支援

美国人口普查局数据爬取失效排查方案

核心结论:Cheerio v13更新不是主要诱因

当前无证据表明Cheerio v13的版本更新导致解析失败,更可能是目标网站的页面结构变更或反爬策略升级。


1. 先验证请求是否获取到有效页面

先打印返回HTML的前1000字符,确认是否拿到了真实的目标页面(而非验证码、403拦截页):

function test() {
  var url = "https://www.census.gov/econ/currentdata/?programCode=VIP&startYear=2022&endYear=2022&categories[]=AXXXX&dataType=T&geoLevel=US&adjusted=1&notAdjusted=0&errorData=0#table-results";
  var res = UrlFetchApp.fetch(url, { muteHttpExceptions: true }).getContentText();
  // 新增:打印页面开头内容,验证是否正常
  console.log("返回页面片段:", res.slice(0, 1000));
  var $ = Cheerio.load(res);
  var data = $("table").find('td').toArray().map(el => $(el).text().replace(/,/g, ''));
  console.log(data);
}

如果输出是验证码提示、403/404错误,说明网站拦截了UrlFetchApp的默认请求。

2. 添加浏览器请求头绕过反爬

多数网站会校验User-Agent字段,给请求添加模拟浏览器的UA:

var res = UrlFetchApp.fetch(url, {
  muteHttpExceptions: true,
  headers: {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  }
}).getContentText();

3. 检查页面结构是否变更

如果请求到了正常HTML但没拿到数据,说明表格的DOM结构变了:

  • 把res保存为本地HTML文件,打开后用浏览器开发者工具查看表格的真实选择器(比如原代码$("table")可能匹配到多个无关表格,需替换为更精确的选择器,如$(".table-results"))
  • 若表格是JS动态加载的,UrlFetchApp只能拿到静态HTML,此时需要抓包获取真实的数据接口,直接请求接口JSON数据(比解析HTML更稳定)。

4. (可选)验证Cheerio版本影响

若仍怀疑版本问题,可在Google Apps Script中切换Cheerio版本测试(比如降级到v12或升级到v14),但此场景下概率极低。


内容的提问来源于stack exchange,提问作者Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:40:48