如何在Bash中获取网页内容并去除HTML标签提取纯文本
实现Bash网页转纯文本输出的方案
你当前的实现只能获取到原始HTML源码,没有做标签解析转换,我们可以通过以下几种方式实现纯文本输出,按效果还原度从高到低排序:
- 方案1:使用命令行浏览器
lynx(推荐,排版还原度最高)lynx是经典的命令行网页浏览器,内置HTML解析渲染能力,可直接输出格式化后的纯文本内容,不会残留HTML标签。
优化后的函数示例:
intro-cron() { URL=http://www.unixgeeks.org/security/newbie/unix/cron-1.html # -dump 参数直接输出页面纯文本,-nolist 隐藏页面末尾的链接索引列表 lynx -dump -nolist "$URL" }
如果系统没有预装lynx,用对应包管理器安装即可,比如Debian/Ubuntu系执行apt install lynx,RHEL/CentOS系执行yum install lynx。
- 方案2:使用
html2text专用转换工具
如果你不需要模拟浏览器渲染,仅需要提取文本,html2text是更轻量的专用转换工具,会自动丢弃所有HTML标签,保留基础换行排版:
intro-cron() { URL=http://www.unixgeeks.org/security/newbie/unix/cron-1.html content=$(wget "$URL" -q -O -) echo "$content" | html2text }
需要提前安装对应软件包,包名一般为html2text。
- 方案3:无额外依赖的纯Shell简易实现
如果你无法安装任何额外工具,可以用sed做简单的标签过滤,这种方式仅适合结构简单的静态页面,复杂页面可能出现排版错乱:
intro-cron() { URL=http://www.unixgeeks.org/security/newbie/unix/cron-1.html content=$(wget "$URL" -q -O -) echo "$content" | \ sed 's/<br[^>]*>/\n/gI' | \ sed 's/<p[^>]*>/\n\n/gI' | \ sed 's/<[^>]*>//g' | \ sed '/^[[:space:]]*$/d' }
该脚本会先把<br>转换为换行、<p>转换为空行,再删除所有HTML标签,最后去掉多余空行。
内容的提问来源于stack exchange,提问作者YorSubs
相关产品推荐
相关产品推荐

