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

使用Apify/Puppeteer爬取时如何排除含指定词汇的URL

使用Apify/Puppeteer爬取时排除含特定词汇页面的实现方案

完全可以通过调整pseudoUrls配置实现需求,不需要额外修改其他爬取逻辑,具体实现方式有两种:

方案1:直接修改pseudoUrls匹配规则(适合简单关键词过滤场景)

pseudoUrls底层基于正则做URL匹配,原有配置里的baseurl + '[.*]'是匹配所有目标域名下的链接,只要把规则替换为带负向预查的正则,就能自动跳过包含指定关键词的URL。
以排除URL中包含foo的页面为例,修改后的代码如下:

await Apify.utils.enqueueLinks({
    requestQueue,
    page,
    pseudoUrls: [
        // 匹配所有baseurl开头、且全路径不包含foo的URL
        baseurl + '((?!foo).)*',
    ],
});

规则扩展说明:

  • 如果需要同时排除多个关键词,比如同时排除foo、bar,把匹配规则改为baseurl + '((?!foo|bar).)*'即可
  • 如果只需要排除路径段包含foo的地址、允许查询参数带foo的地址入队,可以把规则调整为baseurl + '(?!/foo/)((?!/foo/).)*'匹配对应路径规则

方案2:用transformRequestFunction做自定义过滤(适合复杂规则场景)

如果过滤逻辑比较复杂,不想维护可读性差的长正则,可以用enqueueLinks自带的transformRequestFunction钩子做二次校验,示例代码如下:

await Apify.utils.enqueueLinks({
    requestQueue,
    page,
    pseudoUrls: [
        baseurl + '[.*]',
    ],
    transformRequestFunction: (request) => {
        // URL包含foo的请求直接返回null,不会加入爬取队列
        if (request.url.includes('foo')) return null;
        // 这里还可以加其他自定义判断逻辑,比如按URL后缀、参数特征过滤
        return request;
    }
});

这种写法的灵活性更高,除了关键词匹配,还可以实现按文件后缀、参数特征、甚至预先提取页面片段特征做过滤的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:27:25