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

如何让Puppeteer代码遵循robots.txt规则,是否有简易实现方案

已知在Scrapy框架中可以实现自动遵循robots.txt规则,但是我暂时没有找到Puppeteer中内置“遵循Robots协议”功能的简易方法,请问有没有简单的方案可以实现这个需求?

Puppeteer 遵循Robots协议的简易实现方案

Puppeteer官方没有内置遵循Robots协议的相关功能,你可以通过「独立解析robots规则 + 控制Puppeteer访问逻辑」的方式快速实现,不需要复杂的二次开发:


具体实现步骤

  • 首先安装成熟的robots规则解析库,避免自己手写规则匹配逻辑,推荐用robots-parser,安装命令:
    npm install robots-parser
  • 编写访问控制逻辑:
    1. 针对要访问的目标页面,先拼接出对应站点的robots.txt地址(例如目标页为https://test.com/a.html,对应robots地址为https://test.com/robots.txt)
    2. 发送普通HTTP请求获取robots.txt内容,用解析库加载规则
    3. 传入你设置的爬虫UA标识,判断待访问路径是否符合爬取规则
    4. 仅在规则允许爬取的前提下,再调用Puppeteer的page.goto()方法访问对应页面,否则直接跳过该地址

最简示例代码

const puppeteer = require('puppeteer');
const robotsParser = require('robots-parser');
const fetch = require('node-fetch');

// 自定义你的爬虫UA
const CUSTOM_UA = 'MyTestCrawler/1.0';

async function canCrawl(url) {
  const urlObj = new URL(url);
  const robotsUrl = `${urlObj.origin}/robots.txt`;
  try {
    const res = await fetch(robotsUrl);
    // 站点无robots.txt或请求返回异常时默认允许爬取
    if (!res.ok) return true;
    const robotsContent = await res.text();
    const robots = robotsParser(robotsUrl, robotsContent);
    return robots.isAllowed(url, CUSTOM_UA);
  } catch (e) {
    // 请求robots失败时的默认逻辑可根据自身需求调整
    return true;
  }
}

async function run() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  // 保持Puppeteer访问UA和robots规则校验UA一致
  await page.setUserAgent(CUSTOM_UA);

  const targetUrl = 'https://example.com/test-path';
  if (await canCrawl(targetUrl)) {
    await page.goto(targetUrl);
    // 此处补充你的页面操作逻辑
    console.log('页面访问完成');
  } else {
    console.log('该路径被robots.txt禁止爬取,跳过访问');
  }

  await browser.close();
}

run();

注意事项

  • 解析robots规则时传入的UA,要和Puppeteer实际访问页面时设置的UA保持一致,避免规则匹配出错
  • 可以给不同站点的robots规则增加缓存,不需要每次访问同站点下的页面都重复请求解析,提升运行效率
  • 若有特殊合规需求,可以根据自己的场景调整robots请求失败时的默认处理逻辑(比如默认禁止爬取)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:06