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();
}
}
}
第一步:将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();
}
}
}
相关文章推荐
- Jsoup解析HTML获取数据
- Jsoup—解析HTML页面数据的工具
- Android之Jsoup解析Html抓包其他网站数据
- 46.使用Jsoup解析html获取数据
- 使用Jsoup解析html数据
- android使用Jsoup进行html数据解析简单实例浅析
- jsoup网络爬取数据HTML解析
- Jsoup—解析HTML页面数据的工具
- 爬取微博的数据时别人用的是FM.view方法传递html标签那么jsoup怎么解析呢
- Jsoup解析HTML页面数据(又扒到1万+的数据)
- Jsoup入门:解析html 抽取数据
- jsoup 解析html网页标签获取数据(java 网页解析 数据)
- Jsoup解析HTML获取数据的简单实例
- 使用 jsoup 对 HTML 文档进行解析和操作
- Android开发系列十:使用Jsoup解析HTML页面
- Jsoup解析HTML Demo
- 使用 jsoup 对 HTML 文档进行解析和操作
- [Android实例] 利用Jsoup解析Html实现的Android招聘信息大全
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用Jsoup解析HTML页面