JSSoup是否支持类似Beautiful Soup的文本提取功能?
JSSoup全量文本提取实现方案
JSSoup完全支持类似Beautiful Soup中soup.findAll(text=True)的文本提取功能,API设计高度对齐BS4,可直接按以下方法实现全页面可见文本抓取:
方法1:对齐BS4的findAll写法(可单独处理每个文本节点)
和常规BS4用法几乎一致,直接调用findAll并传入text=true即可获取所有文本节点:
const JSSoup = require('jssoup').default; const soup = new JSSoup('待解析的HTML字符串'); // 等效于Beautiful Soup的soup.findAll(text=True) const allTextNodes = soup.findAll(text=true); // 拼接文本,过滤空内容,可根据需求调整分隔符 const visibleText = allTextNodes .map(node => node._text.trim()) .filter(text => text.length > 0) .join(' ');
方法2:一键提取全量文本(无需单独处理节点)
如果不需要对单个文本节点做特殊逻辑处理,可直接调用内置的getText方法快速获取拼接后的文本:
// 传入的参数为不同文本节点之间的分隔符,默认是空字符串 const visibleText = soup.getText(' ');
注意事项(提取纯可见文本必看)
以上两种方法默认会提取script、style等非可见标签内的文本,要过滤这部分内容,可在提取文本前先移除对应标签:
// 移除所有脚本标签 soup.findAll('script').forEach(tag => tag.extract()); // 移除所有样式标签 soup.findAll('style').forEach(tag => tag.extract()); // 再执行文本提取即可得到纯可见内容 const pureVisibleText = soup.getText(' ');
内容的提问来源于stack exchange,提问作者Miki
相关产品推荐
相关产品推荐

