离上次更新文章已经将近半年的时间了,该稳定的基本稳定了:),以后要保持更新文章的频率,不能荒废。话不多说,进入正题。
最近做的一个项目需要把爬虫抓取的数据进行清洗,自己第一次做相关的东西,有什么不对的地方,还望多多指正。
1、拿到的原始数据
Json格式的数据,但汉字都是Unicode编码,还有Html的标签比如<span>,还有转义字符,其实还包括一些特定的东西,这个就根据实际情况来了,比如这个就包括了“收起”的Unicode编码(左下角的\u6536\u8d77)
2、处理过程
字符串比较多,直接贴图
1)第一步过滤Html标签
<code>
str = HtmlRegexpUtil.filterHtml(str);
</code>
前后对比
贴一下HtmlRegexpUtil的代码(非原创)
<code>
private final static String regxpForHtml = "<([^>]*)>"; // 过滤所有以<开头以>结尾的标签
public static String filterHtml(String str) {
Pattern pattern = Pattern.compile(regxpForHtml);
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
boolean result1 = matcher.find();
while (result1) {
matcher.appendReplacement(sb, "");
result1 = matcher.find();
}
matcher.appendTail(sb);
return sb.toString();
}
</code>
2)把Unicode转成字符串
结果
显示可以成功转义,但里面还有一些其他的字符,直接在.trim()后面加上.replace("\t","")即可
TestVo一个普通的Bean而已,和Json数据是相对应的,简单的贴一下
主要是EncodingUtil.unicodeToString,这个从网上找了好几个,贴一个最合适的,其他的多多少少会有问题。
<code>
public static String unicodeToString(String str) {
Pattern pattern = Pattern.compile("(\\u(\p{XDigit}{4}))");
Matcher matcher = pattern.matcher(str);
char ch;
while (matcher.find()) {
ch = (char) Integer.parseInt(matcher.group(2), 16);
str = str.replace(matcher.group(1), ch + "");
}
return str;
}
</code>
对这边有点不是很熟悉,写的有点凌乱,大家多多包涵~