01BIM社区

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3747|回复: 0

html解析 jsoup使用

[复制链接]

14

主题

21

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2016-9-27 09:41:37 | 显示全部楼层 |阅读模式
使用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();
  •         }
  •          
  •          
  •     }
  • }


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|01BIM社区 - 最专业的BIM技术交流平台 ( 渝ICP备15000873号 )

GMT+8, 2024-4-30 19:02 , Processed in 0.056576 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表