JSoup——用Java解析html网页内容
当需要从网页上获取信息时,需要解析html页面。筛选指定标签,并获取其值是必不可少的操作,解析html页面这方面的利器,Python有BeautifulSoup,Java一直没有好的工具,之前的HtmlParser非常难用,虽能解析,但不能过滤,只能从头到尾地遍历各个节点,非常不便,而Jsoup是甚至比BeautifulSoup更加方便的工具,Jsoup支持类似于CSS(或jquery)的选择器语法,来实现非常强大和灵活的查找功能。
下面说说其基本用法:
1)Jsoup.parse(html)//建立一个html文本指定的html文档,返回一个Document对象 2)Document.select(filter)//按照过滤器指定条件,筛选满足条件的所有元素(或称为标签),返回一个Elements对象,表示一组Element对象。 3)Elements.first()//返回Elements的第一个Element对象 4)Element.text()//获取一个标签首尾之间的内容,如
String html="<div>我是一个div</div>";
Document doc=Jsoup.parse(html);
doc.getElementsByTag("div").first().text();//输出"我是一个div" 5)Element.attr(attrname),获取标签某个属性的值,如
String html="<div>我是一个div</div>";
Document doc=Jsoup.parse(html);
doc.getElementsByTag("div").first().attr("class")的值为"divStyle"
给出一个综合示例:
public static HashMap<String, Object> getDetails(String html)
{
HashMap<String, Object> details = new HashMap<String, Object>();
//解析开始
Document doc = Jsoup.parse(html);
//获取形如<div class="result_info ...">something</div>的第一个div元素,class^=result_info表示class以result_info开头,^是正则表达式的开始
Element divAll = doc.select("div[class^=result_info]").first();
//System.out.println(divAll.text());
Element head = divAll.select("h3").first();//获取div中的h3标签
String tvname = head.select("a").attr("title").trim();//获取h3标签中a标签的title属性值
String year = "";
if (head.select("em").size() > 0)//假如h3标签中存在多个<em></em>标签
{
year = head.select("em").first().text().trim();//只要第一个<em>首尾之间的文本
}
String score = "";
Element scoreSection = divAll.select("p").first();
if (scoreSection != null)
{
Elements es = scoreSection.select("span");//选择span元素
int size = es.size();
for (int i = 0; i < size; i++)
{
Element e = es.get(i);
String content = e.text().trim();
content = content.replace("\u00A0", "");//替换 为空格
score += content;
}
}
HashMap<String, String> lstOtherInfo = new HashMap<String, String>();
Elements otherSections = divAll.select("div[class^=result_info_cont]");//获取满足class以result_info_cont开头的所有div元素
int size = otherSections.size();//获取满足条件的div元素的总数是多少
int infoCount = 0;
for (int i = 0; i < size && infoCount < 3; i++)
{
String value = "";
Element item = otherSections.get(i);//获取第i个元素
boolean keyflag = true;
String key = "";
for (int index = 0; index < item.children().size(); index++)//Element.children()用于获取元素的直接子元素
{
Element e = item.child(index);//获取第index个子元素
if (keyflag)
{
key = e.text().trim();
if (key == "简介")
break;
keyflag = false;
}
else
{
if (e.children().size() > 0)
{
for (int b = 0; b < e.children().size(); b++)
{
value += e.child(b).text().trim() + ",";
}
}
else
{
String contents = e.text().trim();
value += contents + ",";
}
}
}
value = value.replaceAll("[" + "," + "]$", "");
lstOtherInfo.put(key, value);
infoCount++;
}
details.put("tv", tvname);
details.put("year", year);
details.put("score", score);
details.put("otherInfo", lstOtherInfo);
return details;
}
参考链接:
http://jsoup.org/apidocs/
https://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/
http://www.open-open.com/jsoup/selector-syntax.htm
JSoup——用Java解析html网页内容的更多相关文章
- java爬取网页内容 简单例子(2)——附jsoup的select用法详解
[背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表 ...
- 使用Jsoup函数包抓取网页内容
之前写过一篇用Java抓取网页内容的文章,当时是用url.openStream()函数创建一个流,然后用BufferedReader把这个inputstream读取进来.抓取的结果是一整个字符串.如果 ...
- Jsoup -- 网络爬虫解析器
需要下载jsoup-1.8.1.jar包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQue ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- Jsoup实现java模拟登陆
Jsoup实现java模拟登陆 2013-10-29 14:52:05| 分类: web开发|举报|字号 订阅 下载LOFTER我的照片书 | 1:如何获取cookies. 1.1 ...
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
- Java 解析 XML
Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- javascript中数组Array的方法
一.常用方法(push,pop,unshift,shift,join)push pop栈方法,后进先出var a =[1,2,3];console.log(a.push(40)); //4 返回数组的 ...
- linux用终端上传文件和文件家到远程的服务器
文件上传:scp 本地文件地址 root@aifei8.net:/var/www/html/landrover 文件夹上传:1.先进入文件夹目录 2. 执行命令:scp -r . root@aifei ...
- Qt *.pro编写一般规则
qmake 之 CONFIG 与 QT 乱谈 看qtcn论坛中经常有人忘记 QT+=network 等语句.随便写写吧,或许对他人有帮助. 写来写去,发现越写越乱,就这样吧,反正主要的内容很简单. d ...
- java Thread编程(三) 同步的两种不同实现方式
1,创建需要同步的对象(方式一) package concurrency; public class Bank { private double amount; public Bank(double ...
- Java-人民币转成大写
/** * 人民币转成大写 hangeToBig * * @param value * @return String */ public static String 人民币转成大写(double va ...
- struts2面试题汇总
一.工作原理 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器 ...
- JS Jquery去除数组重复元素
js jquery去除数组中的重复元素 第一种:$.unique() 第二种: for(var i = 0,len = totalArray_line.length;i < len;i++) { ...
- 10 个免费的 jQuery 可视化编辑器插件
富文本编辑器,也就是所见即所得的 HTML 编辑器,是网站一个非常重要的组件,特别是对于一些内容发布网站来说.本文介绍 10 个基于 jQuery 的可视化文本编辑器. MarkitUp markIt ...
- 洛谷P1174 打砖块
题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...
- 洛谷P1121 环状最大两段子段和
题目描述 给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大. 输入输出格式 输入格式: 输入文件maxsum2.in的第一行是一个正整数N,表示了序列 ...