標籤:httpwatch jsoup 抓包
最近對抓包挺感興趣的,所以就花了一點時間去研究。最後總結一下這套方法吧。
HttpWatch
這個軟體相當於IE的一個外掛程式(FireFox也支援)。HttpWatch是強大的網頁資料分析工具,整合在Internet Explorer工具列,包括網頁摘要、Cookies管理、緩衝管理、訊息頭髮送/接受、字元查詢、POST 資料和目錄管理功能、報告輸出等功能。總之HttpWatch 是一款能夠收集並顯示深層資訊的軟體。
關於HttpWatch的使用可以參考:HttpWatch工具簡介及提示
jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML常值內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。
總而言之,在這裡Jsoup就是用來解析伺服器返回的HTML代碼。
Download the jsoup
Selector of jsoup
實戰一次
抓取目標:校內新聞網站
1.安裝HttpWatch、開啟IE右擊網頁或者選擇工具列,開啟HttpWatch
2.找到我們想要抓取資料的目標網站、HttpWatch點擊Record、進入目標網站、HttpWatch點擊Stop。這樣我們就抓了第一個資料了。
3.分析資料:從可以知道,這是個HttpGet請求,於是我們就寫一個HttpGet方法,在OverView一欄可以看到請求的URL是:
http://notes.stu.edu.cn/login/Login.jsp?logintype=1(只是示範作用,校外網是點不進的)
public static void sendHttpGetRequest(final String url, final HttpCallBack callBack) { new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); // httpGet.setHeader("Cookie", cookie_grade); HttpResponse response = null; try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); String string = EntityUtils.toString(entity, "utf-8"); if (callBack != null) callBack.onFinish(string); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); }
- 4.沒什麼意外的話,我們的回調方法會得到一段伺服器返回的html代碼。接下來我們就用jsoup去解析這段html代碼,我們可以在HttpWatch裡面的Content看一下返回的html。
我們想要的資訊是這樣一段html程式碼片段
<TR class=datalight> <TD width="50%"><a target =‘_blank‘ href="/page/maint/template/news/newstemplateprotal.jsp?templatetype=1&templateid=3&docid=2382"><img class="vt" src="/csweb/images/38.jpg"> 36小時內滿足你五個慾望― <創意駭客松活動 資料人生篇> 20150327-29</a></TD> <TD width="25%" align="center">網路與資訊中心</TD> <TD width="25%" align="center">2015-04-10</TD> </TR> <TR class=datalight> <TD width="50%"><a target =‘_blank‘ href="/page/maint/template/news/newstemplateprotal.jsp?templatetype=1&templateid=3&docid=2381"><img class="vt" src="/csweb/images/38.jpg"> 關於舉辦學生社區X計劃之汕頭傳統手工藝探尋活動的通知</a></TD> <TD width="25%" align="center">學生處</TD> <TD width="25%" align="center">2015-04-10</TD> </TR>
所以就根據Selector of jsoup寫一個解析的方法
private Map<String, String> parseNoteHtml(String html) { Map<String, String> map = new LinkedHashMap<String, String>(); Document doc = Jsoup.parse(html); Elements elements = doc.select("table[class=ListStyle]"); Elements elements2 = elements.select("TR[class=datalight]"); for (Element element : elements2) { Elements element_href = element.select("a"); for (Element element_ : element_href) { map.put(element.text(), element_.attr("href")); } } return map; }
可以看到我們還把每條資訊攜帶的檔案名稱連結也解析出來
for (Element element_ : element_href) {
map.put(element.text(), element_.attr("href"));
}
- 5.我們點擊校內新聞網的具體新聞,
對應和上可以發現具體新聞的URL就是一個主機名稱+我們解析出來的檔案名稱連結。我們再對這個URL進行抓包操作即可得到新聞內容啦。
結果
最後說明:上述的抓包過程都是HttpGet請求的,對於HttpPost請求的也大同小異,要分析的資料要多一點。
Android:HttpWatch+jsoup抓包