標籤:android html解析器 web前端開發 webview js
問題:
由於android的WebView等相關類沒有提供解析html網頁內容的介面,我們想要擷取網頁的內容並解析出我們想要的元素內容,用android的固有API是沒辦法了。
這裡我提供兩種解析html思路:第一種,使用第三方解析html庫;第二種,使用JAVA與JS回調,通過JS解析html。
之前研究了一下htmlparser這個開源庫,但是發現和android提供的庫有衝突,但其在純java應用程式下是可行的。
htmlparser:http://htmlparser.sourceforge.net/
那麼繼續尋找,是否還有更適合android的HTML解析庫,功夫不負有心人,還是找到一款比較好的開源庫,這就是jsoup。
jsoup 是一款 Java 的HTML解析器,可直接解析某個URL地址、HTML常值內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於JQuery的操作方法來取出和操作資料。該版本包含一個支援 HTML5 的解析器分支,可確保跟現在的瀏覽器一樣解析 HTML 的方法,同時降低瞭解析的時間和記憶體的佔用。
可以使用類似DOM的方法來解析一個網頁,比如說,我已經下載了一個網頁到本地,儲存為input.html,那麼通過下面的代碼,我們可以得到id為content的DOM中,所有的超連結。字串linkHref得到的是該連結的連結地址,字串linkText得到的是該連結的文本描述。
jsoup:http://jsoup.org/
jsoup github地址:https://github.com/scrylove/jsoup
jsoup 入門:http://blog.csdn.net/zjx409/article/details/23375565
File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Element content = doc.getElementById("content"); Elements links = content.getElementsByTag("a"); for (Element link : links) { String linkHref = link.attr("href"); String linkText = link.text(); } File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");Element content = doc.getElementById("content");Elements links = content.getElementsByTag("a");for (Element link : links) { String linkHref = link.attr("href"); String linkText = link.text();}
還有很多其他的方法用於在各種不同情況下解析HTML。這裡就不一一列舉了,有興許的同學可以自己去研究一下。
至於第二種思路嘛,這裡不再羅嗦,JAVA和JS互調應該大家都會,至於JS解析html那就交給WEB前端開發人員吧,我們安卓用戶端嘛,只需要得到他們解析完成,回調給我們結果就行。
課參考這篇文章:http://veikr.com/201106/android_webview_content-html.html
Android中如何解析網頁,擷取網頁中的元素內容