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


同事用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,發現它既是最愛了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM