使用Jsoup解析html中的指定数据,十分方便。Jsoup工具十分强大,十分好用。但网上似乎没有很好的例子,本文的目的即在于此。建议仔细阅读代码中的几个例子,Jsoup解析数据不外乎这几种类型。

第一步:将Jsoup JAR包导入项目

第二步:使用Jsoup API

1, 定位

通过div的属性值,定位到html的div(块),即所需要内容对应的块。

示例代码如下:

 

  1. <div class="content"> 
  2.  

2, 筛选数据

a, 通过标签头,在div中继续筛选数据。可能会找到很多的数据,这里会用到循环。见eg1。

 

  1. //eg1:解析百度音乐 
  2.             Document doc = Jsoup.connect("http://list.mp3.baidu.com/top/singer/A.html").get(); 
  3.             Element singerListDiv = doc.getElementsByAttributeValue("class""content").first(); 
  4.             Elements links = singerListDiv.getElementsByTag("a"); 
  5.              
  6.             for (Element link: links) { 
  7.                 String linkHref = link.attr("href"); 
  8.                 String linkText = link.text().trim(); 
  9.                 System.out.println(linkHref);  
  10.             } 

b, 通过标签名,在div中筛选数据,选中此标签内的所有数据。见eg2

 

  1. //eg2:解析万年历 
  2.         Document doc = Jsoup.connect("http://www.nongli.com/item4/index.asp?dt=2012-03-03").get(); 
  3.         Element infoTable = doc.getElementsByAttributeValue("class""table002").first(); 
  4.         Elements tableLineInfos = infoTable.select("tr"); 
  5.         for (Element lineInfo : tableLineInfos) { 
  6.             String lineInfoContent = lineInfo.select("td").last().text().trim(); 
  7.             System.out.println("jsoup is :" + lineInfoContent); 
  8.         } 

c, 限定筛选条件。如果eg5

 

  1. //eg5:查找html元素 
  2.         File input = new File("/tmp/input.html"); 
  3.         Document doc = Jsoup.parse(input, "UTF-8""http://www.oschina.net/"); 
  4.         Elements links = doc.select("a[href]"); // 链接 
  5.         Elements pngs = doc.select("img[src$=.png]"); // 所有 png 的图片 
  6.         Element masthead = doc.select("div.masthead").first();// div with class=masthead 
  7.         Elements resultLinks = doc.select("h3.r > a"); // direct a after h3 

NOTE: <td colspan="2" class="l3">二月15日<br>壬辰年<br>癸卯月<br>丁卯日<br></td>

此处不能直接单独获得三组数据,获得的是总的三个数据。可通过正则表达式分解

3, 获取数据

即element.text()即可获得相关数据

 

plus: Jsoup有灵活的语法,比如通过class-value对指定div块,可通过select(div.value)找到,更多用法请参考文档! 

 

 

以下给出所有示例代码:

 

  1. package com.mike.activity; 
  2.  
  3. import java.io.File; 
  4. import java.io.IOException; 
  5.  
  6. import org.jsoup.Connection; 
  7. import org.jsoup.Jsoup; 
  8. import org.jsoup.nodes.Document; 
  9. import org.jsoup.nodes.Element; 
  10. import org.jsoup.select.Elements; 
  11.  
  12. import android.app.Activity; 
  13. import android.os.Bundle; 
  14. import android.util.Log; 
  15. import android.view.View; 
  16. import android.widget.TextView; 
  17.  
  18. public class JsoupDemoActivity extends Activity { 
  19.     /** Called when the activity is first created. */ 
  20.      
  21.     private StringBuilder sb ; 
  22.      
  23.      
  24.     @Override 
  25.     public void onCreate(Bundle savedInstanceState) { 
  26.         super.onCreate(savedInstanceState); 
  27.         setContentView(R.layout.main); 
  28.          
  29.         sb = new StringBuilder(); 
  30.         TextView textView = (TextView) findViewById(R.id.textView1); 
  31.          
  32.         try { 
  33. //          //eg1:解析百度音乐 
  34. //          Document doc = Jsoup.connect("http://list.mp3.baidu.com/top/singer/A.html").get(); 
  35. //          Element singerListDiv = doc.getElementsByAttributeValue("class", "content").first(); 
  36. //          Elements links = singerListDiv.getElementsByTag("a"); 
  37. //           
  38. //          for (Element link: links) { 
  39. //              String linkHref = link.attr("href"); 
  40. //              String linkText = link.text().trim(); 
  41. //              System.out.println(linkHref);  
  42. //          } 
  43. //           
  44. //           
  45. //          //eg2:解析万年历 
  46. //          Document doc = Jsoup.connect("http://www.nongli.com/item4/index.asp?dt=2012-03-03").get(); 
  47. //          Element infoTable = doc.getElementsByAttributeValue("class", "table002").first(); 
  48. //          Elements tableLineInfos = infoTable.select("tr"); 
  49. //          for (Element lineInfo : tableLineInfos) { 
  50. //              String lineInfoContent = lineInfo.select("td").last().text().trim(); 
  51. //              System.out.println("jsoup is :" + lineInfoContent); 
  52. //          } 
  53.              
  54.              
  55.             //eg3:解析指定段落的内容----注意此代码中的语法:<div class="artHead"> 
  56. //          Document doc = Jsoup.connect("http://passover.blog.51cto.com").get(); 
  57. //          Elements divs = doc.select("div.artHead"); 
  58. //          for (Element div: divs) { 
  59. //              System.out.println(div.select("h3[class=artTitle]")); 
  60. //          } 
  61.              
  62.             //eg4: 
  63. //          Document doc = Jsoup.connect("http://passover.blog.51cto.com").get(); 
  64.              
  65.              
  66.              
  67. //          //eg5:查找html元素 
  68.             File input = new File("/tmp/input.html"); 
  69.             Document doc = Jsoup.parse(input, "UTF-8""http://www.oschina.net/"); 
  70.             Elements links = doc.select("a[href]"); // 链接 
  71.             Elements pngs = doc.select("img[src$=.png]"); // 所有 png 的图片 
  72.             Element masthead = doc.select("div.masthead").first();// div with class=masthead 
  73.             Elements resultLinks = doc.select("h3.r > a"); // direct a after h3 
  74.              
  75.              
  76. //          //test 
  77. //          File input = new File("D:/test.html");  
  78. //           Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");  
  79.              
  80.              
  81.             /* 
  82.              * 项目数据准备 
  83.              */ 
  84.              
  85.             //eg5:万年历:http://www.zdic.net/nongli/2012-3-7.htm 
  86.              
  87.             //data1:dayFav(宜) 
  88. //          Document doc = Jsoup.connect("http://www.zdic.net/nongli/2012-3-7.htm").get(); 
  89. //          Element dayFav = doc.getElementsByAttributeValue("class", "ly2").first(); 
  90. //          Elements dayFavItems = dayFav.getElementsByTag("a"); 
  91. //          for (Element dayFavItem:dayFavItems) { 
  92. //              System.out.println(dayFavItem.text()); 
  93. //          } 
  94.              
  95.             //data2:dayUnfav(忌) 
  96. //          Element dayUnfav = doc.getElementsByAttributeValue("class", "lj2").first(); 
  97. //          Elements dayUnfavItems = dayUnfav.getElementsByTag("a"); 
  98. //          for (Element dayUnfavItem:dayUnfavItems) { 
  99. //              System.out.println(dayUnfavItem.text()); 
  100. //          } 
  101.              
  102.             //data3:taiSheng(胎神) 
  103. //          Element taiSheng = doc.getElementsByAttributeValue("class", "lts2").first(); 
  104. //          System.out.println(taiSheng.text()); 
  105.              
  106.             //data4:chong sha(冲煞信息) 
  107. //          Element chong = doc.getElementsByAttributeValue("class", "lcs").first(); 
  108. //          Element sha = doc.getElementsByAttributeValue("class", "lcs").get(1); 
  109. //          System.out.println(chong.text()); 
  110. //          System.out.println(sha.text()); 
  111.              
  112.             //data5:zhengChong(正冲)和zhiXing(值星) 
  113. //          Element zhengChong = doc.getElementsByAttributeValue("class", "lzc2").first(); 
  114. //          Element zhiXing = doc.getElementsByAttributeValue("class", "lzx2").first(); 
  115. //          System.out.println(zhengChong.text()); 
  116. //          System.out.println(zhiXing.text()); 
  117.                          
  118.              
  119.             //data6:godFav(吉神宜趋) 
  120. //          Element godUnfav = doc.getElementsByAttributeValue("class", "js2").first(); 
  121. //          System.out.println(godUnfav.text()); 
  122.              
  123.             //data7:godUnfav(凶神宜忌) 
  124. //          Element godFav = doc.getElementsByAttributeValue("class", "xs2").first(); 
  125. //          System.out.println(godFav.text()); 
  126.              
  127.             //data8:pengZuBaiJi(彭祖百忌) 
  128. //          Element pengZuBaiJi = doc.getElementsByAttributeValue("class", "pz2").first(); 
  129. //          System.out.println(pengZuBaiJi.text()); 
  130.              
  131.             //data9:wuXing(五行) 
  132. //          Element wuXing = doc.getElementsByAttributeValue("class", "wuh2").first(); 
  133. //          System.out.println(wuXing.text()); 
  134.              
  135.              
  136.              
  137.         } catch (IOException e) { 
  138.             // TODO Auto-generated catch block 
  139.             e.printStackTrace(); 
  140.         } 
  141.          
  142.          
  143.     }