離上次更新文章已經將近半年的時間了,該穩定的基本穩定了:),以后要保持更新文章的頻率,不能荒廢。話不多說,進入正題。
最近做的一個項目需要把爬蟲抓取的數據進行清洗,自己第一次做相關的東西,有什么不對的地方,還望多多指正。
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>
對這邊有點不是很熟悉,寫的有點凌亂,大家多多包涵~