Android 台灣中文網

標題: 強大html解析裝置jsoup [打印本頁]

作者: hl2dm    時間: 2012-12-10 09:33
標題: 強大html解析裝置jsoup
我最近開始研究如何使用jsoup
我已經成功get方法取得html字串

針對這個字串的處理我在網路上有找到範例選擇:
Elements pngs = doc.select ("div.kk2");

利用這個字串我成功取得放圖片的div:
<div class="kk2" id="12" style="border:2px solid #FFFF00; top:-1px;
left:-203px; height:151px; width:200px">

<img src = "http:// kk.org / t / ea / ff.jpg "alt =" text "style =" fff "/>

</ div>

透過範例的篩選:
for(Element png : pngs){
              sff2.append(png.attr("abs:href")).append("
").append(png.text()).append("\n");
          }

卻取得怪怪的字串
init ~ kk.org ~ t / ea / ff.jpg ~ text
intt跟~都可以用replaceAll替換

問題是alt的值...不能單純用替換的方式

我單純只想要取得http://kk.org/t/ea/ff.jpg 該怎麼做呢?
有方法能直接從div中去除值alt?還是一開始選擇就能選擇只有img呢?

這工具真的很神奇,但我還是不太清楚該怎麼用
希望版友能給一些幫助謝謝
作者: ploglin    時間: 2012-12-10 09:36
可以說一下你的目地是要什麼?
是重組 HTML 還是單純的要某一個 TAG 的屬性?內容?其它?
作者: hl2dm    時間: 2012-12-10 09:49
本帖最後由 hl2dm 於 2012-12-10 09:51 編輯

他是一個貼圖網站
我想要擷取他每一張圖片的連結
有了連結之後就能夠整理
製成下載APP或是瀏覽APP之類的

我只要img的值其他都不需要
作者: ploglin    時間: 2012-12-10 09:52
http://jsoup.org/cookbook/extracting-data/dom-navigation

上面有說明怎麼取得 TAG 的 Attribute
作者: hl2dm    時間: 2012-12-10 11:47
本帖最後由 hl2dm 於 2012-12-10 12:01 編輯

剛剛以奇摩搜尋測試了一下
  1. private void now() {
  2.                 String webserviceurl  = "http://tw.search.yahoo.com/search/images;_ylt=A8tUwJjRU8VQD3gAiBFs1gt.";
  3.                 InputStream is;

  4.                 List<NameValuePair> lstAddToken         = new ArrayList<NameValuePair>();
  5.                 lstAddToken.add(new BasicNameValuePair("fr","sfp"));
  6.                 lstAddToken.add(new BasicNameValuePair("p","java"));
  7.                 lstAddToken.add(new BasicNameValuePair("iscqry",""));
  8.                 lstAddToken.add(new BasicNameValuePair("ei","utf-8"));

  9.                 //add parameters to the URL
  10.                 webserviceurl                           += "?";
  11.                 String paramString                      = URLEncodedUtils.format(lstAddToken, "utf-8");
  12.                 webserviceurl                           += paramString;

  13.                 //Call the webservice using HttpGet with parameters and get the response from webservice
  14.                 try
  15.                 {
  16.                     DefaultHttpClient demo = new DefaultHttpClient();
  17. demo.getParams().setParameter("http.protocol.content-charset", "UTF-8");

  18. // Get Request Example,取得 google 查詢 httpclient 的結果
  19. HttpGet httpGet = new HttpGet(webserviceurl);
  20. HttpResponse response2 = demo.execute(httpGet);
  21. String responseString = EntityUtils.toString(response2.getEntity());
  22. Document doc = Jsoup.parse(responseString);
  23. Elements pngs = doc.select("img[src]");
  24. if (response2.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
  25. // 如果回傳是 200 OK 的話才輸出
  26. System.out.println(responseString);
  27. System.out.println(pngs);

  28. } else {
  29. System.out.println(response2.getStatusLine());
  30. }

  31.                 }
  32.                 catch (Throwable t)
  33.                 {
  34.                      Log.e("log_tag", "Error converting result "+t.toString());
  35.                 }
  36.                
  37.         }
複製代碼
得到回傳
  1. <img width="1" height="1" alt="" src="http://row.bc.yahoo.com/b?P=mz_sXctUwKeTXvBXEmE7Qw_tdw5QhFDFWjYADuBj&amp;T=1847ko0p4%2fX%3d1355110967%2fE%3d2114705005%2fR%3dtwsrcgspi%2fK%3d5%2fV%3d2.1%2fW%3dHR%2fY%3dKIMO%2fF%3d3387896648%2fH%3dc2VydmVJZD0ibXpfc1hjdFV3S2VUWHZCWEVtRTdRd190ZHc1UWhGREZXallBRHVCaiIgc2l0ZUlkPSIyNDI1NjEiIHRTdG1wPSIxMzU1MTEwOTY3ODU1NjA5IiA-%2fQ%3d-1%2fS%3d1%2fJ%3d99C054CB&amp;U=12bep1lpl%2fN%3dWD4uMsorwsw-%2fC%3d-1%2fD%3dNT1%2fB%3d-1%2fV%3d0" />
  2. <img src="http://ts3.mm.bing.net/th?id=H.4747137966868250&amp;pid=15.1" width="145" alt="" height="145" />
  3. <img src="http://ts4.mm.bing.net/th?id=H.4573702904743551&amp;pid=15.1" width="194" alt="" height="145" style="margin-left:-25px;" />
  4. <img src="http://ts1.mm.bing.net/th?id=H.4937430769337608&amp;pid=15.1" width="182" alt="" height="145" style="margin-left:-19px;" />
  5. <img src="http://ts3.mm.bing.net/th?id=I.4872666953155418&amp;pid=15.1" width="218" alt="" height="145" style="margin-left:-35px;" />
  6. <img src="http://ts4.mm.bing.net/th?id=I.4819765862138207&amp;pid=15.1" width="191" alt="" height="145" style="margin-left:-23px;" />
  7. <img src="http://ts2.mm.bing.net/th?id=H.4619341236602193&amp;pid=15.1" width="182" alt="" height="145" style="margin-left:-36px;" />
  8. <img src="http://ts1.mm.bing.net/th?id=H.4854653888105216&amp;pid=15.1" width="195" alt="" height="145" style="margin-left:-25px;" />
  9. <img src="http://ts4.mm.bing.net/th?id=H.4709827606611127&amp;pid=15.1" width="294" alt="" height="145" style="margin-left:-149px;" />
  10. <img src="http://ts1.mm.bing.net/th?id=H.4773680868623148&amp;pid=15.1" width="145" alt="" height="145" />
  11. <img src="http://ts3.mm.bing.net/th?id=I.4665129879470998&amp;pid=15.1" width="145" alt="" height="145" />
複製代碼
不過還是除了圖片連結外又多了一堆orz alt height width 要怎麼弄掉還是不會LOL


於是我又測試了
  1. Elements pngs = doc.select("img[src]").removeAttr("style").removeAttr("width").removeAttr("alt").removeAttr("height").removeAttr("pid");
複製代碼
成功達到我的目的了...
奇怪我之前在家裡面測試就不行@"@
原來removeAttr這個功能有用!!
回家再測試
因為該網站不適合在公司開XXD
作者: ploglin    時間: 2012-12-10 13:37
你的作法還是不太正確,它的 Cookbook 寫的很清楚唷!

  1. Elements img = content.getElementsByTag("img");
  2. for (Element link : img) {
  3.   String linkSrc = link.attr("src"); // 這個就只會取得 src 這個屬性
  4. }
複製代碼





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1