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

如何使用Puppeteer仅获取页面的标题与核心内容?

如何抓取任意网页的核心内容(GetPocket克隆场景)

嘿,我正好有几个实用的方案帮你解决这个核心内容提取的问题——毕竟做GetPocket克隆,自动识别纯净内容是关键环节!

  • 用成熟的内容提取库省力气
    既然你已经在用Puppeteer,强烈推荐搭配专门的内容提取工具,比如Node.js生态里的@mozilla/readability(就是Firefox阅读器背后的核心算法)。这类库不需要你预先知道目标网页的CSS类,会自动通过分析页面结构、段落密度、元素位置等识别核心内容区域。
    给你个快速上手的代码示例:

    const puppeteer = require('puppeteer');
    const { Readability } = require('@mozilla/readability');
    const { JSDOM } = require('jsdom');
    
    async function extractCleanContent(url) {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
      // 等待页面加载稳定,避免内容未渲染完全
      await page.goto(url, { waitUntil: 'networkidle2' });
      
      // 获取完整页面HTML
      const pageHtml = await page.content();
      // 用JSDOM解析后交给Readability处理
      const dom = new JSDOM(pageHtml, { url });
      const reader = new Readability(dom.window.document);
      const cleanArticle = reader.parse();
    
      // 这里就能拿到过滤后的标题和核心内容了
      console.log('纯净标题:', cleanArticle.title);
      console.log('核心内容HTML:', cleanArticle.content);
      
      await browser.close();
      return cleanArticle;
    }
    
  • 自定义逻辑应对特殊页面
    要是遇到某些结构怪异的网页,现成库提取效果不理想,可以结合Puppeteer做一些简单的自定义判断:

    • 通过page.evaluate()遍历页面所有<p>标签,统计每个父元素的段落数量,核心内容区通常段落最多
    • 主动排除带nav、footer、sidebar、widget这类关键词的元素(通过class或id判断)
    • 最后清理掉内容里的脚本、样式标签,只保留纯文本或结构化的HTML
  • 把提取的内容转成Markdown
    拿到核心内容的HTML后,用turndown库就能轻松转成Markdown格式:

    const TurndownService = require('turndown');
    const turndownService = new TurndownService();
    
    // 承接上面的示例,把HTML转成Markdown
    const markdownContent = turndownService.turndown(cleanArticle.content);
    

这些方法组合起来,基本能覆盖绝大多数任意URL的抓取需求,不用再头疼每个网站的不同结构啦!

内容的提问来源于stack exchange,提问作者The.Wolfgang.Grimmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:02:50