Jsoup进阶之获取指定数据

使用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(); //这时候该html流文件存在内存中,css selector class=content 类型          
Elements links = singerListDiv.getElementsByTag("a");//调用class=content 里面的 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"); //对该信息表继续进行筛选,获得一个tr 集合 数据       
for (Element lineInfo : tableLineInfos) {             
    String lineInfoContent = lineInfo.select("td").last().text().trim(); //获得tr集合中的一个td元素     
    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)找到,更多用法请参考文档!

参考中文文档:

中文jsoup 地址

时间: 2024-10-09 08:10:00

Jsoup进阶之获取指定数据的相关文章

Oracle中使用游标获取指定数据表的所有字段名对应的字符串

操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR(255):='STAFFDOC'; --定义要查询的数据表名变量,STAFFDOC为我测试用的数据表名,请修改成您的数据库中的对应数据表名字mystring NVARCHAR2(4000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游标          s

[原创]利用爬虫技术获取网页数据,以及想要的指定数据

最近在公司做个系统,由于要获取网页的一些数据,以及一些网页的数据,所以就写的一个公用的HttpUtils.下面是针对乌云网我写的一个例子. 一.首先是获取指定路径下的网页内容. public static String httpGet(String urlStr, Map<String, String> params) throws Exception { StringBuilder sb = new StringBuilder(); if (null != params &&

SQL Server获取指定行的数据

SQL Server获取指定行(如第二行)的数据 --SQL Server获取指定行(如第二行)的数据-- --法一(对象法)-- select * from ( select * , number = row_number() over(order by Grade desc) from Students )  m where number = 2 --法二(排除法)--- select top 1 * from Students where Grade not in ( select top

mysql 行号 获取指定行数据

mysql 行号的实现 Select id,(@rowNum:[email protected]+1) as rowNo From first,(Select (@rowNum :=0) ) bOrder by first.id Desc 这样就可以实现mysql 的行号 获取指定行的数据可以使用limit 具体的使用如下: select * from first limit num,1 即可 mysql 行号 获取指定行数据,布布扣,bubuko.com

mustache 获取json数据内数组对象指定元素的方法

由于最近项目再用mustache,因此发现了这个问题,mustache无法获取json数据内数组键值的指定索引的元素 遂上网查资料总结一下两种方法 1,数据为数组对像 var obj = [{name: 'foo'}, {name: 'bar'}]; var tmp = '{{#1}}{{name}}{{/1}}'; console.log(Mustache.render(tmp, obj)); //bar 这种方法个人觉得有一定局限性 -----参照:http://stackoverflow.

利用sendmsg和recvmsg来指定发送接口或者获取接收数据接口

前言 sendmsg和recvmsg函数是一对相对下层的套接字发送.接受函数.通过这对函数,我们可以设置或者取得数据包的一些额外的控制信息,这些信息中比较常用的就是本文要介绍的发送.接受接口信息.通过这对函数,我们可以指定一个数据包发送的时候使用的接口(网卡)或者获得一个接受到数据包的来源接口. sendmsg函数使用 sendmsg(fd, &mhdr, 0)函数中最重要的就是msghdr结构体.其定义如下: struct msghdr { void *msg_name; #发送地址 sock

使用Jsoup 抓取页面的数据

需要使用的是jsoup-1.7.3.jar包   如果需要看文档我下载请借一步到官网:http://jsoup.org/ 这里贴一下我用到的 Java工程的测试代码 package com.javen.Jsoup; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.E

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据 ??matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. ??它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. ??在Linux下比较著名的数据图工具还有gnuplot

如何从Zabbix数据库中获取监控数据

做过Zabbix的同学都知道,Zabbix通过专用的Agent或者SNMP收集相关的监控数据,然后存储到数据库里面实时在前台展示.Zabbix监控数据主要分为以下两类: 历史数据:history相关表,从history_uint表里面可以查询到设备监控项目的最大,最小和平均值,即存储监控数据的原始数据. 趋势数据:trends相关表,趋势数据是经过Zabbix计算的数据,数据是从history_uint里面汇总的,从trends_uint可以查看到监控数据每小时最大,最小和平均值流量. Zabb