文章引用鴻揚大大的連接具體介紹怎樣使用Jsoup包抓取HTML數據,是一個純javaproject,並將其打包成jar包。但願瞭解怎樣用java語言爬蟲網頁的可以看下。html
雜家前文就又介紹用HTTP訪問百度主頁獲得html的string字符串,但html的文本數據假設不通過處理就是個文本字符串沒有不論什麼效果的。java
所謂的瀏覽器就是負責將文本的html「翻譯」成看到的界面。在前文有介紹,這個csdn的clientapp分首頁、業界、移動、研發、程序猿、雲計算五大類。node
以業界爲例。http://news.csdn.net/ 實際加上page1的http地址是:http://news.csdn.net/news/1算法
從上圖可知,一個完整的新聞包括東西仍是比較多的。將其抽象出來ID號、標題、連接、日期、圖片連接、內容、類型。這7個屬性。
瀏覽器
NewsItem.java是上面具備7個屬性的新聞bean
安全
package org.yanzi.bean;
public class NewsItem
{
private int id;
/**
* 標題
*/
private String title;
/**
* 連接
*/
private String link;
/**
* 公佈日期
*/
private String date;
/**
* 圖片的連接
*/
private String imgLink;
/**
* 內容
*/
private String content;
/**
* 類型
*
*/
private int newsType;
public int getNewsType()
{
return newsType;
}
public void setNewsType(int newsType)
{
this.newsType = newsType;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getLink()
{
return link;
}
public void setLink(String link)
{
this.link = link;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getDate()
{
return date;
}
public void setDate(String date)
{
this.date = date;
}
public String getImgLink()
{
return imgLink;
}
public void setImgLink(String imgLink)
{
this.imgLink = imgLink;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
@Override
public String toString()
{
return "NewsItem [id=" + id + ", title=" + title + ", link=" + link + ", date=" + date + ", imgLink=" + imgLink
+ ", content=" + content + ", newsType=" + newsType + "]";
}
}
package org.yanzi.bean;
public class CommonException extends Exception
{
/**
*
*/
private static final long serialVersionUID = 1L;
public CommonException()
{
super();
// TODO Auto-generated constructor stub
}
public CommonException(String message, Throwable cause)
{
super(message, cause);
// TODO Auto-generated constructor stub
}
public CommonException(String message)
{
super(message);
// TODO Auto-generated constructor stub
}
public CommonException(Throwable cause)
{
super(cause);
// TODO Auto-generated constructor stub
}
}
Constant.java 這塊將其弄成interface比較奇怪哈,寫成class也ok
微信
package org.yanzi.csdn;
public interface Constant
{
public static final int NEWS_TYPE_YEJIE = 1; //業界
public static final int NEWS_TYPE_YIDONG = 2; //移動
public static final int NEWS_TYPE_YANFA = 3; //研發
public static final int NEWS_TYPE_CHENGXUYUAN = 4;//程序猿
public static final int NEWS_TYPE_YUNJISUAN = 5; //雲計算
}
package org.yanzi.csdn;
public class URLUtil
{
public static final String NEWS_LIST_URL = "http://www.csdn.net/headlines.html";
public static final String NEWS_LIST_URL_YIDONG = "http://mobile.csdn.net/mobile";
public static final String NEWS_LIST_URL_YANFA = "http://sd.csdn.net/sd";
public static final String NEWS_LIST_URL_YUNJISUAN = "http://cloud.csdn.net/cloud";
public static final String NEWS_LIST_URL_ZAZHI = "http://programmer.csdn.net/programmer";
public static final String NEWS_LIST_URL_YEJIE = "http://news.csdn.net/news";
/**
* 依據文章類型,和當前頁碼生成url
* @param newsType
* @param currentPage
* @return
*/
public static String generateUrl(int newsType, int currentPage)
{
currentPage = currentPage > 0 ? currentPage : 1;
String urlStr = "";
switch (newsType)
{
case Constant.NEWS_TYPE_YEJIE:
urlStr = NEWS_LIST_URL_YEJIE;
break;
case Constant.NEWS_TYPE_YANFA:
urlStr = NEWS_LIST_URL_YANFA;
break;
case Constant.NEWS_TYPE_CHENGXUYUAN:
urlStr = NEWS_LIST_URL_ZAZHI;
break;
case Constant.NEWS_TYPE_YUNJISUAN:
urlStr = NEWS_LIST_URL_YUNJISUAN;
break;
default:
urlStr = NEWS_LIST_URL_YIDONG;
break;
}
urlStr += "/" + currentPage;
return urlStr;
}
}
package org.yanzi.csdn;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.yanzi.bean.CommonException;
public class DataUtil {
/**
* 獲取HTML數據
* @param urlStr url地址
* @return
* @throws CommonException
*/
public static String doGet(String urlStr) throws CommonException{
StringBuffer sb = new StringBuffer();
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setDoInput(true);
conn.setDoOutput(true);
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
while((len = is.read(buf)) != -1){
sb.append(new String(buf, 0, len, "UTF-8"));
}
is.close();
}else{
throw new CommonException("訪問網絡失敗00");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new CommonException("訪問網絡失敗11");
}
return sb.toString();
}
}
package org.yanzi.biz;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.yanzi.bean.CommonException;
import org.yanzi.bean.NewsItem;
import org.yanzi.csdn.DataUtil;
import org.yanzi.csdn.URLUtil;
/**
* 處理NewItem的業務類
* @author zhy
*
*/
public class NewsItemBiz
{
/**
* 業界、移動、雲計算
*
* @param htmlStr
* @return
* @throws CommonException
*/
public List<NewsItem> getNewsItems( int newsType , int currentPage) throws CommonException
{
String urlStr = URLUtil.generateUrl(newsType, currentPage);
String htmlStr = DataUtil.doGet(urlStr);
List<NewsItem> newsItems = new ArrayList<NewsItem>();
NewsItem newsItem = null;
Document doc = Jsoup.parse(htmlStr);
Elements units = doc.getElementsByClass("unit");
for (int i = 0; i < units.size(); i++)
{
newsItem = new NewsItem();
newsItem.setNewsType(newsType);
Element unit_ele = units.get(i);
Element h1_ele = unit_ele.getElementsByTag("h1").get(0);
Element h1_a_ele = h1_ele.child(0);
String title = h1_a_ele.text();
String href = h1_a_ele.attr("href");
newsItem.setLink(href);
newsItem.setTitle(title);
Element h4_ele = unit_ele.getElementsByTag("h4").get(0);
Element ago_ele = h4_ele.getElementsByClass("ago").get(0);
String date = ago_ele.text();
newsItem.setDate(date);
Element dl_ele = unit_ele.getElementsByTag("dl").get(0);// dl
Element dt_ele = dl_ele.child(0);// dt
try
{// 可能沒有圖片
Element img_ele = dt_ele.child(0);
String imgLink = img_ele.child(0).attr("src");
newsItem.setImgLink(imgLink);
} catch (IndexOutOfBoundsException e)
{
}
Element content_ele = dl_ele.child(1);// dd
String content = content_ele.text();
newsItem.setContent(content);
newsItems.add(newsItem);
}
return newsItems;
}
}
一、要爬蟲一個html數據在以前可以使用HtmlParser。見連接http://www.cnblogs.com/loveyakamoz/archive/2011/07/27/2118937.html 但自從jsoup誕生後,使用比HtmlParser更方面。此處就是利用jsoup解析html的,需要載入lib目錄下的jsoup-1.7.2.jar、jsoup-1.7.2-sources.jar。本身add to build path就能夠。後者是源代碼。可以查看,真正的包就第一個。網絡
二、jsoup可以直接打開一個網頁url,此處爲了方便已經寫了從url獲取string類型的html代碼了。架構
因此可以直接利用Document doc = Jsoup.parse(htmlStr); 獲得Document類。app
以業界新聞爲例。http://news.csdn.net/news/1,按快捷鍵ctrl+u查看其源代碼。搜索keywordunit可以看到:
每一個新聞就是以keyword「unit」來標識的,第一頁一共同擁有10條新聞因此有10個unit。Elements units = doc.getElementsByClass("unit"); 獲得這10個新聞item的集合。
三、接下來就是對一個新聞提取具體信息了
先來看當中一個完整的新聞html代碼:
<div class="unit">
<h1><a href="http:www.csdn.net/article/2014-07-25/2820877" target="_blank" >微視、美拍等的春天,不是短視頻應用的春天</a></h1>
<h4>發表於<span class="ago">2014-07-25 16:52</span>|<span class="view_time">690次閱讀</span>|<span class="num_recom">6條評論</span></h4>
<dl>
<dt>
<a href="http:www.csdn.net/article/2014-07-25/2820877" target="_blank"><img src="http:cms.csdnimg.cn/article/201407/25/53d21abd54a77.jpg" alt="" /></a>
</dt>
<dd>微視、美拍等短視頻應用近期很是火。它們都已經在App Store社交免費榜靠前。它們的流行。能證實短視頻應用的春天到了嗎?小謙以爲,非也。僅僅有解決4G網絡問題、分享問題以及拍攝優化問題後,它的春天才會真正到來。</dd>
</dl>
<div class="tag"><a href="http:www.csdn.net/tag/%E5%B0%8F%E8%B0%A6/news" target="_blank">小謙</a><a href="http:www.csdn.net/tag/%E5%BE%AE%E8%A7%86/news" target="_blank">微視</a><a href="http:www.csdn.net/tag/%E7%A7%92%E6%8B%8D/news" target="_blank">秒拍</a><a href="http:www.csdn.net/tag/%E7%BE%8E%E5%9B%BE%E7%A7%80%E7%A7%80/news" target="_blank">美圖秀秀</a><a href="http:www.csdn.net/tag/%E7%BE%8E%E6%8B%8D/news" target="_blank">美拍</a><a href="http:www.csdn.net/tag/%E5%BE%AE%E4%BF%A1/news" target="_blank">微信</a><a href="http:www.csdn.net/tag/%E5%BA%94%E7%94%A8/news" target="_blank">應用</a><a href="http:www.csdn.net/tag/%E7%9F%AD%E8%A7%86%E9%A2%91/news" target="_blank">短視頻</a></div>
</div>
從html代碼上可以看到,新聞的標題是以<h1>標識的。因此用Element h1_ele = unit_ele.getElementsByTag("h1").get(0);獲得一個Element。此處get(0),是因爲h1標籤的就有1個。
h1標識裏的代碼是:
<a href="http://www.csdn.net/article/2014-07-30/2820930" target="_blank" >IDC:全球智能機出貨量漲23% 華爲進前5且翻番</a>
因此經過 Element h1_a_ele = h1_ele.child(0);
String title = h1_a_ele.text();
String href = h1_a_ele.attr("href");
獲得<a>標籤裏標識的東西。經過:
String title = h1_a_ele.text();
String href = h1_a_ele.attr("href");
獲得標題和連接。
接下來經過h4的tag找日期:
<h4>發表於<span class="ago">14小時前</span>|<span class="view_time">2944次閱讀</span>|<span class="num_recom">17條評論</span></h4>
經過class找到ago孩子。最終獲得時間。
其它的都類似了,從中可以看出假設是依據html外圍的標籤,用getElementsByTag("h1").get(0)。假設裏面包括的有class則要用getElementsByClass("ago").get(0)來進一步定位。假設沒有class,僅僅是普通的孩子,利用child(0)定位獲得Element。
最後是測試代碼:
Test.java
package org.yanzi.test; import java.util.List; import org.yanzi.bean.CommonException; import org.yanzi.bean.NewsItem; import org.yanzi.biz.NewsItemBiz; import org.yanzi.csdn.Constant; public class Test { public static void main(String[] args){ Test test = new Test(); test.test01(); } @org.junit.Test public void test01() { NewsItemBiz biz = new NewsItemBiz(); int currentPage = 1; try { /** * 業界 */ System.out.println("-----------業界-----------"); List<NewsItem> newsItems = biz.getNewsItems(Constant.NEWS_TYPE_YEJIE, currentPage); for (NewsItem item : newsItems) { System.out.println(item); } /** * 程序猿雜誌 */ System.out.println("-----------程序猿-----------"); newsItems = biz.getNewsItems(Constant.NEWS_TYPE_CHENGXUYUAN, currentPage); for (NewsItem item : newsItems) { System.out.println(item); } /** * 研發 */ System.out.println("-----------研發-----------"); newsItems = biz.getNewsItems(Constant.NEWS_TYPE_YANFA, currentPage); for (NewsItem item : newsItems) { System.out.println(item); } /** * 移動 */ System.out.println("-------------移動---------"); newsItems = biz.getNewsItems(Constant.NEWS_TYPE_YIDONG, currentPage); for (NewsItem item : newsItems) { System.out.println(item); } System.out.println("-------------結束---------"); } catch (CommonException e) { e.printStackTrace(); } } }執行結果:
-----------業界----------- NewsItem [id=0, title=IDC:全球智能機出貨量漲23% 華爲進前5且翻番, link=http://www.csdn.net/article/2014-07-30/2820930, date=15小時前, imgLink=http://cms.csdnimg.cn/article/201407/30/53d844474e279.jpg, content=IDC日前公佈了2014年第二季度全球智能手機市場相關的研究數據。數據顯示,位居全球智???手機出貨量前五的廠商各自是三星、蘋果、華爲、聯想和LG。華爲智能手機出貨量更是同比大漲了近一倍,而三星卻同比降低。, newsType=1] NewsItem [id=0, title=專訪葉勁峯:漫談遊戲開發和遊戲優化, link=http://www.csdn.net/article/2014-07-30/2820931, date=15小時前, imgLink=http://cms.csdnimg.cn/article/201407/30/53d85983915fe.jpg, content=社區之星第50期採訪了騰訊互動娛樂研發部引擎技術中心專家project師葉勁峯,他講述了譯著《遊戲引擎架構》經歷。並就遊戲引擎、優化、遊戲開發學習等進行了分享。
與此同一時候,葉勁峯也將坐鎮社區問答第8期回答你們問題。, newsType=1] NewsItem [id=0, title=修成正果:Mozilla正式任命Chris Beard爲CEO, link=http://www.csdn.net/article/2014-07-29/2820918, date=2014-07-29 14:40, imgLink=http://cms.csdnimg.cn/article/201407/29/53d712420edcd.jpg, content=Mozilla正式任命暫時CEO Chris Beard爲正式CEO,其於2004年增長Mozilla。隨後一直負責產品、營銷、創新等方面的工做。後在風投公司擔任高管。在創新和企業管理方面積累了很是多經驗。Beard被公以爲最適合的CEO人選。, newsType=1] NewsItem [id=0, title=蘋果和IBM成最佳搭檔 微軟谷歌或受威脅, link=http://www.csdn.net/article/2014-07-28/2820905-apple-ibm, date=2014-07-29 14:51, imgLink=http://cms.csdnimg.cn/article/201407/28/53d61d099020f.jpg, content=月中,蘋果宣佈與IBM達成獨家合做協議。兩家合做在很是大程度上是互補的,因爲他們分別專一於消費者和企業市場,合做後必在企業級市場推出更強大的產品。同一時候,他們的發展也會對微軟、谷歌和黑莓等公司帶來不利影響。
, newsType=1] NewsItem [id=0, title=敢爲人先:亞馬遜推出3D定製和銷售門戶站點, link=http://www.csdn.net/article/2014-07-29/2820911, date=2014-07-29 08:21, imgLink=http://cms.csdnimg.cn/article/201407/29/53d6e919d6e7e.jpg, content=在線零售商亞馬遜近日推出了一門戶站點,該站點是一個3D打印產品的銷售平臺。用戶可以依據本身的喜愛,比方材料、大小、樣式和顏色的個性化。來定製和購買3D產品。甚至僅僅要喜歡,還可以將照片或喜愛的話定製上去。, newsType=1] NewsItem [id=0, title=微軟中國遭工商總局調查 或因涉及「不公平交易」, link=http://www.csdn.net/article/2014-07-29/2820910, date=2014-07-29 07:47, imgLink=http://cms.csdnimg.cn/article/201407/29/53d6dcefe99e0.jpg, content=日前。國家工商總局相關人員突訪了微軟位?
?我國北京、上海、廣州和成都四地的辦公室,正就一些事情展開問詢。或因該公司涉及操做系統壟斷問題和賄賂官員以換取軟件合同等。
, newsType=1] NewsItem [id=0, title=傳智播客「2014年全國高校IT骨幹教師研修班」火熱開班, link=http://www.csdn.net/article/2014-07-28/2820886, date=2014-07-28 10:11, imgLink=http://cms.csdnimg.cn/article/201407/28/53d5b05190e1a_thumb.jpg, content=日前,由傳智播客主辦的「2014年全國高校IT骨幹教師研修班」火熱開班。
本屆研修班吸引了來自全國30多所院校,近60名IT類專業教師參加。接下來將分Android、Java、PHP、網頁平面UI、.Net共5個班開展課程學習交流。
, newsType=1] NewsItem [id=0, title=【暢言】從程序猿到架構師的方法與邏輯, link=http://www.csdn.net/article/2014-07-28/2820883, date=2014-07-28 08:51, imgLink=http://cms.csdnimg.cn/article/201407/28/53d59d5f7d4ca.jpg, content=架構師這個詞經常見到,很是多人都冠着這個頭銜。實際上很是多人對架構師到底是幹什麼的都沒有統一的認識。V衆投發起人李智勇則利用特定場景進行分析。詮釋了架構師這個概念,並給出怎樣成爲架構師方法。, newsType=1] NewsItem [id=0, title=Windows Phone 8.1 Update 1:圖標可合併成目錄、4G語音通話, link=http://www.csdn.net/article/2014-07-28/2820882, date=2014-07-28 07:52, imgLink=http://cms.csdnimg.cn/article/201407/28/53d58fc0ef514.jpg, content=微軟最終計劃公佈已經進入RTM階段的Windows Phone 8.1Update 1(或GDR1),可能包括:對圖標進行拖拽以及合併成目錄、支持1280 x 800屏幕分辨率和7英寸的設備、支持交互式的手機外殼(見上圖),以及4G語音通話。, newsType=1] NewsItem [id=0, title=智能硬件生態未成。打造平臺爲時尚早, link=http://www.csdn.net/article/2014-07-28/2820881, date=2014-07-28 00:37, imgLink=null, content=當前的智能硬件產業發展是由創業公司探路。巨頭紛紛跟進打造開放平臺。
但智能硬件市場至今無標杆性產品、開發人員及應用前景不明、還沒有找到用戶「痛點」等特徵代表市場仍處於萌芽階段,打造平臺爲時尚早。, newsType=1] -----------程序猿----------- NewsItem [id=0, title=Server SAN:雲計算時代的弄潮兒, link=http://www.csdn.net/article/2014-07-28/2820902, date=2014-07-28 15:17, imgLink=http://cms.csdnimg.cn/article/201407/28/53d6087c3920e.jpg, content=Server SAN爲什麼一時間能成爲了高大上的東西?分佈式存儲說來並不新鮮。2000年諸如GPFS、Lustre、Panasas及PVFS就出現了。但以後發展不溫不火。
說究竟仍是實際應用需求的推進,當前的繁榮源於數據在爆炸式增加。, newsType=4] NewsItem [id=0, title=大數據 「在路上」, link=http://www.csdn.net/article/2014-07-25/2820859, date=2014-07-25 11:03, imgLink=http://cms.csdnimg.cn/article/201407/25/53d1cfb8a3844.jpg, content=將來的Google無人駕駛汽車,必定像是一個移動的數據中心,需要同一時候處理着結構化、非結構化的大量數據。彼時的Big Data纔算是真正用於汽車。, newsType=4] NewsItem [id=0, title=融合與統一:簡評OS X10.10 Yosemite, link=http://www.csdn.net/article/2014-07-21/2820768, date=2014-07-21 17:09, imgLink=http://cms.csdnimg.cn/article/201407/23/53cf2e9689263.jpg, content=蘋果旗下兩大系列操做系統OS X和iOS發展步調並不一致。相對於iOS的迅猛發展。OS X顯得不溫不火。Yosemite的公佈,應該說是個里程碑。本文基於Yosemite-Developer Preview 1.0版本號簡單介???這個OS X家族的新成員。
, newsType=4] NewsItem [id=0, title=智能家居產品安全漫談, link=http://www.csdn.net/article/2014-07-21/2820748, date=2014-07-21 11:06, imgLink=http://cms.csdnimg.cn/article/201407/21/53cc8931b917b.jpg, content=移動互聯網技術的普遍應用爲智能家居產業的發展提供了必要條件,無論傳統巨頭仍是新興創業公司都在投入這一領域。但隨之而來的安全問題卻未引發足夠重視。, newsType=4] NewsItem [id=0, title=可穿戴計算機改變信息交互方式, link=http://www.csdn.net/article/2014-07-18/2820718, date=2014-07-18 09:51, imgLink=http://cms.csdnimg.cn/article/201407/18/53c8bf81c4723.jpg, content=可穿戴設備幫助咱們更方便地感受和捕捉世界。而且,咱們也在以新的方式進行感官交流。
將來幾十年。可穿戴計算機將嵌入咱們的衣服、珠寶甚至皮膚。而這將對人類信息交互方式產生很是大影響。
, newsType=4] NewsItem [id=0, title=高效能技術團隊的協同工具箱, link=http://www.csdn.net/article/2014-07-16/2820681, date=2014-07-16 13:30, imgLink=http://cms.csdnimg.cn/article/201407/16/53c6483a059be.jpg, content=使用適合團隊的協同工具。不但能使工做按預約成本如期順利推動,而且能實現對團隊成員、項目過程以及產品等的分析管理。未經調研就選擇別人以爲好的工具。很是可能遭遇「水土不服」。, newsType=4] NewsItem [id=0, title=當虛擬照進現實——Oculus的世界夢, link=http://www.csdn.net/article/2014-07-14/2820639, date=2014-07-14 13:19, imgLink=http://cms.csdnimg.cn/article/201407/14/53c36d0be8cd1.jpg, content=專一虛擬現實設備研發的Oculus被Facebook以20億美圓收於麾下,Oculus公司創始人Palmer Luckey但願創建本身的虛擬現實硬件生產線,他還表示要從用戶的角度來不斷無缺Rift,將來是屬於用戶的,而不只僅是Oculus。, newsType=4] NewsItem [id=0, title=在動態網絡下實現分佈式共享存儲, link=http://www.csdn.net/article/2014-07-09/2820585-implementing-distributed-shared-memory-for-dynamic-networks, date=2014-07-09 10:59, imgLink=http://cms.csdnimg.cn/article/201407/09/53bcddd2580b0.jpg, content=本文介紹了分佈式環境下實現共享內存模型會遇到的各類問題和挑戰。並針對不一樣問題介紹多種算法的優劣性。
本文是對現階段該領域研究現狀的總體介紹,經過本文能瞭解動態分佈式共享內存研究的前沿情況、挑戰與機遇。
, newsType=4] NewsItem [id=0, title=從Objective-C到Swift, link=http://www.csdn.net/article/2014-07-08/2820568, date=2014-07-08 11:22, imgLink=http://cms.csdnimg.cn/article/201407/09/53bcabb118d79.jpg, content=2014年WWDC大會。蘋果在毫無預兆的狀況下公佈了Swift語言。Swift背後的概念大多與Objective-C類似,但更爲簡潔、天然,也吸取了很是多其它語言的語法。本文將對Swift的語法、特色及改進進行全面介紹。, newsType=4] NewsItem [id=0, title=50年內有望實現的7大技術, link=http://www.csdn.net/article/2014-07-07/2820549, date=2014-07-07 10:43, imgLink=http://cms.csdnimg.cn/article/201407/07/53ba0dedb7494.jpg, content=1964年,美國電氣與電子project學會IEEE雜誌《IEEE Spectrum》剛成立時,一些預想家就曾預測過50年後的科技走勢,如今,這一切都發生了。
如今又有一批預想家預測了將來50年的科技發展趨勢。, newsType=4] -----------研發-----------
最後經過Export---Java---JAR file將其打包。
附個jsoup的相關連接:http://blog.csdn.net/yjflinchong/article/details/7743995
源代碼下載連接:http://download.csdn.net/detail/yanzi1225627/7697313