您的位置:首页 > Web前端 > JavaScript

Jsoup解析html中的指定数据

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

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

第二步:使用Jsoup API

1, 定位

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

示例代码如下:

 
<div class="content"> 
 

2, 筛选数据

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

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

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

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

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

 
//eg5:查找html元素 
        File input = new File("/tmp/input.html"); 
        Document doc = Jsoup.parse(input, "UTF-8", "http://www.oschina.net/"); 
        Elements links = doc.select("a[href]"); // 链接 
        Elements pngs = doc.select("img[src$=.png]"); // 所有 png 的图片 
        Element masthead = doc.select("div.masthead").first();// div with class=masthead 
        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)找到,更多用法请参考文档! 

 

 

以下给出所有示例代码:

 
package com.mike.activity; 
 
import java.io.File; 
import java.io.IOException; 
 
import org.jsoup.Connection; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 
 
public class JsoupDemoActivity extends Activity { 
    /** Called when the activity is first created. */ 
     
    private StringBuilder sb ; 
     
     
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        sb = new StringBuilder(); 
        TextView textView = (TextView) findViewById(R.id.textView1); 
         
        try { 
//          //eg1:解析百度音乐 
//          Document doc = Jsoup.connect("http://list.mp3.baidu.com/top/singer/A.html").get(); 
//          Element singerListDiv = doc.getElementsByAttributeValue("class", "content").first(); 
//          Elements links = singerListDiv.getElementsByTag("a"); 
//           
//          for (Element link: links) { 
//              String linkHref = link.attr("href"); 
//              String linkText = link.text().trim(); 
//              System.out.println(linkHref);  
//          } 
//           
//           
//          //eg2:解析万年历 
//          Document doc = Jsoup.connect("http://www.nongli.com/item4/index.asp?dt=2012-03-03").get(); 
//          Element infoTable = doc.getElementsByAttributeValue("class", "table002").first(); 
//          Elements tableLineInfos = infoTable.select("tr"); 
//          for (Element lineInfo : tableLineInfos) { 
//              String lineInfoContent = lineInfo.select("td").last().text().trim(); 
//              System.out.println("jsoup is :" + lineInfoContent); 
//          } 
             
             
            //eg3:解析指定段落的内容----注意此代码中的语法:<div class="artHead"> 
//          Document doc = Jsoup.connect("http://passover.blog.51cto.com").get(); 
//          Elements divs = doc.select("div.artHead"); 
//          for (Element div: divs) { 
//              System.out.println(div.select("h3[class=artTitle]")); 
//          } 
             
            //eg4: 
//          Document doc = Jsoup.connect("http://passover.blog.51cto.com").get(); 
             
             
             
//          //eg5:查找html元素 
            File input = new File("/tmp/input.html"); 
            Document doc = Jsoup.parse(input, "UTF-8", "http://www.oschina.net/"); 
            Elements links = doc.select("a[href]"); // 链接 
            Elements pngs = doc.select("img[src$=.png]"); // 所有 png 的图片 
            Element masthead = doc.select("div.masthead").first();// div with class=masthead 
            Elements resultLinks = doc.select("h3.r > a"); // direct a after h3 
             
             
//          //test 
//          File input = new File("D:/test.html");  
//           Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");  
             
             
            /* 
             * 项目数据准备 
             */ 
             
            //eg5:万年历:http://www.zdic.net/nongli/2012-3-7.htm 
             
            //data1:dayFav(宜) 
//          Document doc = Jsoup.connect("http://www.zdic.net/nongli/2012-3-7.htm").get(); 
//          Element dayFav = doc.getElementsByAttributeValue("class", "ly2").first(); 
//          Elements dayFavItems = dayFav.getElementsByTag("a"); 
//          for (Element dayFavItem:dayFavItems) { 
//              System.out.println(dayFavItem.text()); 
//          } 
             
            //data2:dayUnfav(忌) 
//          Element dayUnfav = doc.getElementsByAttributeValue("class", "lj2").first(); 
//          Elements dayUnfavItems = dayUnfav.getElementsByTag("a"); 
//          for (Element dayUnfavItem:dayUnfavItems) { 
//              System.out.println(dayUnfavItem.text()); 
//          } 
             
            //data3:taiSheng(胎神) 
//          Element taiSheng = doc.getElementsByAttributeValue("class", "lts2").first(); 
//          System.out.println(taiSheng.text()); 
             
            //data4:chong sha(冲煞信息) 
//          Element chong = doc.getElementsByAttributeValue("class", "lcs").first(); 
//          Element sha = doc.getElementsByAttributeValue("class", "lcs").get(1); 
//          System.out.println(chong.text()); 
//          System.out.println(sha.text()); 
             
            //data5:zhengChong(正冲)和zhiXing(值星) 
//          Element zhengChong = doc.getElementsByAttributeValue("class", "lzc2").first(); 
//          Element zhiXing = doc.getElementsByAttributeValue("class", "lzx2").first(); 
//          System.out.println(zhengChong.text()); 
//          System.out.println(zhiXing.text()); 
                         
             
            //data6:godFav(吉神宜趋) 
//          Element godUnfav = doc.getElementsByAttributeValue("class", "js2").first(); 
//          System.out.println(godUnfav.text()); 
             
            //data7:godUnfav(凶神宜忌) 
//          Element godFav = doc.getElementsByAttributeValue("class", "xs2").first(); 
//          System.out.println(godFav.text()); 
             
            //data8:pengZuBaiJi(彭祖百忌) 
//          Element pengZuBaiJi = doc.getElementsByAttributeValue("class", "pz2").first(); 
//          System.out.println(pengZuBaiJi.text()); 
             
            //data9:wuXing(五行) 
//          Element wuXing = doc.getElementsByAttributeValue("class", "wuh2").first(); 
//          System.out.println(wuXing.text()); 
             
             
             
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
         
         
    } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文档 html