Tika Parser 1.20解析网页时标签文本内出现多余空格求助
解决Tika Parser 1.20解析单个文本节点时出现多余空格的问题
这确实是个挺闹心的问题——毕竟常见的多空格都是不同标签文本拼接导致的,单个文本节点内部莫名插空格,排查方向得稍微调整下。我给你几个具体的排查和解决思路:
1. 先确认页面原始内容里有没有隐形分隔
有时候浏览器渲染出来的文本看起来是连续的,但源码里可能藏着零宽空格、软换行或者其他非打印字符,Tika解析时把这些字符转成了可见空格。你可以:
- 用浏览器开发者工具定位到那个
span标签,查看它的原始textContent(不是渲染后的文本) - 或者直接用
curl拉取页面源码,搜索这个电话号码的原始字符串,看是否本来就有分隔
2. 隔离排查:排除Crawler4j的影响
先把Crawler4j摘出去,单独用Tika解析目标HTML片段,确认是不是Tika本身的问题。比如写个简单的测试代码:
String html = "<span>Tel: +91-22-61801700</span>"; InputStream input = new ByteArrayInputStream(html.getBytes(StandardCharsets.UTF_8)); AutoDetectParser parser = new AutoDetectParser(); BodyContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); parser.parse(input, handler, metadata); System.out.println(handler.toString());
如果这段代码输出还是带空格,那问题肯定出在Tika这边;如果正常,那就要检查Crawler4j在爬取过程中是否修改了页面内容。
3. 检查Tika的字符编码处理
页面的编码声明和实际编码不匹配,也可能导致解析时出现异常字符(被转成空格)。你可以:
- 查看页面的
<meta charset>标签,确认编码类型 - 在Tika解析时手动指定编码,比如:
metadata.set(Metadata.CONTENT_ENCODING, "UTF-8"); parser.parse(input, handler, metadata);
4. 临时修复:针对性清理文本
如果暂时找不到根源,也可以在提取文本后加个专门的清理逻辑,针对电话号码这类格式用正则修正:
String extractedText = handler.toString(); // 匹配数字中间的单个空格并移除 String cleanedText = extractedText.replaceAll("(\\d)\\s+(\\d)", "$1$2");
这是个应急方案,还是建议找到根源解决。
5. 升级Tika版本试试
Tika 1.20是2019年的老版本了,后续的2.x系列修复了很多文本提取的bug。你可以尝试升级到最新的稳定版,再测试下这个问题是否消失。
内容的提问来源于stack exchange,提问作者user7552123
相关产品推荐
相关产品推荐

