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

在Google Apps Script中使用CSS选择器无法获取下一页链接

解决Google Apps Script中Cheerio无法获取下一页链接的问题

问题分析

你的Python脚本能正常获取链接,但Apps Script返回undefined,核心原因是请求头差异导致服务器返回的页面内容不一致,其次可能是Cheerio与BeautifulSoup在选择器匹配细节上的细微区别。

解决方案

1. 完善请求头,模拟真实浏览器请求

Yellowpages服务器可能根据请求头字段判断请求来源,补充完整的浏览器头信息,让请求更接近真实用户访问:

2. 调整Cheerio选择器写法

尝试调整选择器的匹配顺序,避免Cheerio的解析优先级影响结果。

修改后的完整代码

function fetchInformation() {
  const Url = 'https://www.yellowpages.ca/search/si/1/window/Vancouver+BC';
  // 用与Python一致的User-Agent,补充必要请求头
  const headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://www.yellowpages.ca/'
  };

  const getOptions = {
    'method': 'GET',
    'headers': headers,
    'muteHttpExceptions': true,
    'followRedirects': true
  };

  const response = UrlFetchApp.fetch(Url, getOptions);
  console.log('响应状态码:', response.getResponseCode());
  
  const htmlContent = response.getContentText();
  // 可选:把HTML存到Drive,方便检查页面内容是否包含目标元素
  // DriveApp.createFile('yellowpages_test.html', htmlContent, MimeType.HTML);
  
  const $ = Cheerio.load(htmlContent);
  // 先匹配类,再过滤属性,提升Cheerio的匹配成功率
  const nextPage = $("a.pageButton").filter("[data-analytics*='load_more']").first().attr('href');
  
  console.log('下一页链接:', nextPage);
}

额外排查建议

  1. 检查返回的HTML内容:如果修改后仍无结果,把htmlContent保存到Drive,确认页面里是否存在目标<a>元素。如果不存在,说明服务器还在返回差异化内容,可尝试从浏览器开发者工具复制当前会话的Cookie添加到请求头中。
  2. 验证选择器有效性:把获取到的HTML粘贴到Cheerio在线测试工具,测试选择器是否能正确匹配元素,排除选择器本身的问题。

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:23:10