Java抓任意網頁標題亂碼jsoup解決方案一例

rgqancy發表於2016-08-06

同事用Java做了一個抓取任意網頁的標題的功能,由於任意網頁的HTML的head中meta中指定的charset五花八門,比如常用的utf-8,gbk,gb2312。

自己寫程式碼處理,短時間內,發現各種情況太難考慮周全,總是抓取亂碼。面臨的挑戰:也可能有meta也可能沒meta,即使有meta也可能大寫也可能小寫,即使大小寫搞定也可能帶空白字元,總之各種意想不到。不過呢,搜尋引擎爬蟲抓到的網頁咋就不會亂碼呢?

百度查這個問題基本無解,bing查這個問題也是無用功居多,只好開上藍燈上谷歌,三個備選方案:

1.上StackOverflow看是否有最佳答案

http://stackoverflow.com/questions/10996726/encoding-of-response-is-incorrect-using-apache-httpclient

Stackoverflow上說如果HTTP client元件不支援,common http也不支援的話,Spring's RESTTemplate能幹這事。我查了查有點玄。

2.把HTML的元素模型化,提取模型。

http://docs.oracle.com/cd/B28359_01/appdev.111/b28394/adx_j_parser.htm

用Oralce的XML Developer's Kit,Example裡包含一個操作XML的DOM的AutoDetectEncoding.java類,挺欣喜,可惜下載XDK和這個Example有點費勁。但是後來比較一下XML和HTML的編碼元素及方式確實不一樣,雖然HTML可以認為是特殊的XML,都是遵循DOM模型,但是DOM不同的Level,水很深,發現也是路選歪了。

3.使用類似搜尋殷勤的爬蟲程式或元件,還得是java的。

http://www.huqiwen.com/2012/05/03/use-jsoup-analytics-html-document/

這個帖子原作者也說了原來都是htmlparser,後來都鳥槍換炮用jsoup了。炮果然比槍好用。中間還從CSDN找到一個網友的帖子,願意提供自己在gitbub上開源爬蟲,測測網頁說是能行,就是會當機,讓我怎麼用,不能給自己埋雷,寧可不解決。試用jsoup,發現它既是最愛了。

 

相關文章