java項目有時候我們需要別人網頁上的數據,怎么辦?我們可以借助第三方架包jsou來實現,jsoup的中文文檔,那怎么具體的實現呢?那就跟我一步一步來吧
最先肯定是要准備好這個第三方架包啦,下載地址,得到這個jar后在需要怎么做呢?別急,我們慢慢來
將jsoup.jar拷貝到項目的WebRoot—>WEB-INF—>lib文件夾
之后我們需要將這個架包引入一下哦!
右鍵項目選擇build path—>configure build path—>libraries—>add jars—>找到剛剛放入的目錄下的jsoup
准備工作完成了,接下來就是我們的編碼部分了,加油哦!
既然是抓取網頁的內容那肯定首要有被抓的網站的地址,這里就以我其中一篇博客為准吧http://www.cnblogs.com/luhan/p/5953387.html
這個是我這篇文章的截圖,比如我要抓取Android零碎知識點,之后會一直更新哦這一段文字
//獲取整個網站的根節點,也就是html開頭部分一直到結束,這里get方式,post方式是一樣的
Document document = Jsoup.connect(url).get();
//輸出一下我們會看到整個字符串如下
System.out.println(document);
這里只是截圖了一部分
我們會看到我們需要抓的那一段文字在a標簽包裹在,而且還有一個重要的就是id=cb_post_title_url,看過文檔的應該知道,jsoup里面有getElementById這個方法,其實跟js里面獲取元素是一樣的,這里我們就可以用
getElementById的方法來獲取這個a標簽,獲取到后我們就可以獲取里面的內容了不是嗎?而正好jsou也給我們提供了這樣的一個方法text()方法,就是獲取標簽的文本內容,記得是文本而不是html形式的
如下我們通過getElementById這個方法來獲取到我們想要的a標簽
Element a = document.getElementById("cb_post_title_url");
這時候我們輸出的內容如下
System.out.println(a.text());
是不是得到了我們想要的了?當然啦,這只是jsoup的最簡單的抓取而已,如果需要獲取到的是個列表形式的啊,jsoup也一樣可以的,我們都知道id是唯一的,不可以重復的,所以我們通過id獲取到的只能是一行標簽
但是一般列表比如ul-li我們就可以用getElementsByTag這個方法,通過標簽名獲取,然后再通過for循環的方式一個一個的去抓就完事啦,接下來附上代碼
package com.luhan.text; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; public class Text { private static final String url = "http://www.cnblogs.com/luhan/p/5953387.html"; public static void main(String[] args) { try { //獲取整個網站的根節點,也就是html開頭部分一直到結束
Document document = Jsoup.connect(url).post(); Element a = document.getElementById("cb_post_title_url"); System.out.println(a.text()); } catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } }
jsoup里面的方法我就不一一介紹啦,不懂的小伙伴可以去看jsoup的中文文檔哦,我就說說比較重要的方法吧
Jsoup.connect(url).post();獲取網頁的跟目錄
getElementById通過id來獲取
getElementsByClass通過class來獲取
getElementsByTag通過標簽名稱來獲取
text()獲取標簽的文本,再次強調一下是文本
html()獲取標簽里面的所有字符串包括html標簽
attr(attributeKey)獲取屬性里面的值,參數是屬性名稱
注意
jsoup獲取網頁的根目錄可能跟源代碼不一樣,所以需要小伙伴們細心哦
至此jsoup抓取網頁的數據就告一段落啦,說的不太好,歡迎大家多指點,這個我用java控制台的,javaweb以及Android用法是一樣的,先要導入框架,然后調用方法就ok了