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

如何用Node.js和Puppeteer过滤含黑名单域名的抓取URL?

解决方案

核心思路是利用浏览器原生的URL对象提取每个链接的域名,与黑名单域名做匹配,过滤掉属于黑名单的URL,同时保留原链接的完整地址。

步骤1:预处理黑名单,提取纯域名

先把黑名单中的URL转换为统一的域名格式(比如将https://amazon.com转为amazon.com),用Set存储可提升匹配效率:

const blacklist = ['https://amazon.com'];
// 转换为纯域名集合
const blacklistedDomains = new Set(
  blacklist.map(url => new URL(url).hostname)
);

步骤2:过滤目标URL数组

遍历links数组,对每个URL提取域名后与黑名单对比,保留不在黑名单中的完整URL:

const linkSelector = 'div.yuRUbf > a';
let links = await page.$$eval(linkSelector, link => {
  return link.map(x => x.href);
});

// 过滤逻辑
const filteredLinks = links.filter(link => {
  try {
    // 提取当前链接的域名
    const currentDomain = new URL(link).hostname;
    // 检查是否在黑名单中,不在则保留
    return !blacklistedDomains.has(currentDomain);
  } catch (error) {
    // 处理无效URL(比如格式错误、相对链接),这里默认保留,可按需调整
    return true;
  }
});

补充说明

  • URL对象能可靠处理各种合法URL格式,自动提取hostname。如果需要匹配主域名(包含子域名,比如www.amazon.com也需要过滤),可以改用后缀匹配:
    return !Array.from(blacklistedDomains).some(domain => currentDomain.endsWith(domain));
    
  • 加入try-catch是为了避免无效URL导致整个过滤流程中断,可根据需求决定是否保留无效链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:10:31