2023年提取网页用户可读纯文本的最佳方法探讨
2023年提取网页用户可读纯文本的实用方案
针对你提到的两个问题,直接给你实用的解决思路:
问题1:curl无法获取JS渲染的文本怎么办?
curl只能抓取静态HTML,现在大量站点用React/Vue这类框架做客户端渲染,纯curl根本拿不到实际展示的内容。2023年主流的替代方案是用支持JS渲染的无头浏览器工具,比如Playwright或者Puppeteer——这俩都是活跃维护的工具,比已经停止更新的Phantomjs靠谱多了。它们能模拟真实浏览器加载页面,等待JS执行完成后再获取完整的渲染内容。
问题2:怎么只提取核心文本,忽略广告、导航这类无关内容?
别直接提取整个页面的文本,而是用以下两种思路精准定位核心内容:
- 利用页面结构选择器:大部分正规内容站点的文章主体都会有统一的类名或ID,比如
.article-content、#post-body,用无头浏览器的DOM选择器定位到这个元素后,直接提取它的textContent就行。 - 用专门的内容提取库:最推荐Mozilla的Readability库,它能自动分析网页结构,识别出主要的文章内容,过滤掉侧边栏、广告、导航等冗余元素。可以把它和无头浏览器结合用,在页面加载完成后,在浏览器环境里运行Readability,直接拿到整理好的纯文本内容。
举个简单的Playwright+Readability的代码示例:
const { chromium } = require('playwright'); const { Readability } = require('@mozilla/readability'); async function getArticleText(url) { const browser = await chromium.launch({ headless: true }); const page = await browser.newPage(); // 等待页面完全加载,包括JS执行 await page.goto(url, { waitUntil: 'networkidle' }); // 在浏览器环境中用Readability提取核心内容 const result = await page.evaluate(() => { const reader = new Readability(document.cloneNode(true)); const article = reader.parse(); return article.textContent; }); console.log(result); await browser.close(); } // 调用示例 getArticleText('https://people.com/books/jay-shetty-announces-new-book-8-rules-of-love/');
另外,如果是静态站点,也可以用curl配合pup(一个命令行HTML解析工具),通过选择器提取指定元素的文本,但这种方式只适用于不需要JS渲染的页面。
内容的提问来源于stack exchange,提问作者Andrew Arrow
相关产品推荐
相关产品推荐

