Java使用Jsoup简单解析页面
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
jsoup 的主要功能如下:
1. 从一个 URL,文件或字符串中解析 HTML;
2. 使用 DOM 或 CSS 选择器来查找、取出数据;
3. 可操作 HTML 元素、属性、文本;
实战代码:
@Service("htmlParser")
public class HtmlParserImpl implements HtmlParser {
private static Logger logger = LoggerFactory.getLogger(HtmlParserImpl.class);
/**
* 解析人行征信报告页面
* @param html
* @return
*/
public List<DetailVo> parse(String html) {
if (StringUtils.isBlank(html)){
return null;
}
Document document = Jsoup.parse(html);
Elements loanElements = document.select("table span.h1 strong");
for (Element element : loanElements){
if (element.text().contains("购房贷款")){
...
setLoanDetailVoByElement(element, detailVo, houseLoanDetailVo);
}else if (element.text().contains("其他贷款")){
...
setLoanDetailVoByElement(element, detailVo, loanDetailVo);
}
}
return list;
}
/**
* 设值查询记录(包括机构、个人)
* @param tableEle
* @param agencyDetailVo
*/
private void setQueryRecordDetailVoByTableElement(Element tableEle, DetailVo agencyDetailVo) {
Elements trList = tableEle.select("tr");
if (trList != null && trList.size() > 0){
for (Element trEle : trList){
Elements trChildren = trEle.children();
if (trChildren != null && trChildren.size() == 4){
agencyDetailVo.getList().add(Lists.newArrayList(
trChildren.get(0).text(), trChildren.get(1).text(),
trChildren.get(2).text(), trChildren.get(3).text()));
}
}
}
}
/**
* 设值贷款部分(包括了信用卡、购房贷款、其他贷款、为他人担保)
* @param element
* @param detailVo
* @param creditCardDetailVo
*/
private void setLoanDetailVoByElement(Element element, DetailVo detailVo, DetailVo creditCardDetailVo) {
Element olNode = element.parent().nextElementSibling();
Elements olNodes = olNode.children();
for (Element ele : olNodes){
if (ele.tagName().indexOf("span") > -1){
detailVo = new DetailVo();
detailVo.setTitle(ele.child(0).text());
}else if (ele.tagName().indexOf("li") > -1){
if (detailVo != null){
detailVo.getList().add(ele.text());
}
if (ele.nextElementSibling() == null ||!"li".equals(ele.nextElementSibling().tagName())){
creditCardDetailVo.getList().add(detailVo);
}
}
}
}
}
教程重点推荐:
http://www.cnblogs.com/jycboy/p/jsoupdoc.html
官网:
https://jsoup.org/
Java使用Jsoup简单解析页面的更多相关文章
- java爬虫--jsoup简单的表单抓取案例
分析需求: 某农产品网站的农产品价格抓取 网站链接:点击打开链接 页面展示如上: 标签展示如上: 分析发现每日价格行情包括了蔬菜,水果,肉等所有的信息,所以直接抓每日行情的内容就可以实现抓取全部数据. ...
- java代理通俗简单解析
1 代理 1.1 代理的概念和作用 代理的概念很好理解,就像黄牛代替票务公司给你提供票,经纪人代理艺人和别人谈合作.Java的代理是指实现类作为代理类的属性对象, ...
- java正则API简单解析
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...
- java中jsoup框架解析html
今天遇到对网页内容进行操作,思考了一下,先获取连接后的html内容,然后对html文档进行操作呗.思路没有问题,但是问题还是不少.于是便找到了jsoup这个神器了... 1.什么是jsoup? 百度百 ...
- 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...
- 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml
之前提到过,对于简单的网页结构解析,可以直接通过观察法.手工写正则解析,可以做出来,比如网易微博.但是对于结构稍微复杂点的,比如新浪微博,如果还用正则,用眼睛一个个去找,未免太麻烦了. 本文介绍两个工 ...
- MiseringThread.java 解析页面线程
MiseringThread.java 解析页面线程 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner; imp ...
- MinerUrl.java 解析页面后存储URL类
MinerUrl.java 解析页面后存储URL类 package com.iteye.injavawetrust.miner; /** * 解析页面后存储URL类 * @author InJavaW ...
- 使用 java 实现一个简单的 markdown 语法解析器
1. 什么是 markdown Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的 ...
随机推荐
- linux性能分析工具Top
- vue,一路走来(14)--短信验证码框的实现(类似支付密码框)
由于项目的扩展,新增了很多功能,今天谈一下短信验证码框的实现. 思路:每个小方框其实就是单独的每一个input标签(叫假input标签),每个长度为1,然后上面再写一个大的input标签(叫真实inp ...
- 一、AJAX
一. (function ($) { //1.得到$.ajax的对象 var _ajax = $.ajax; $.ajax = function (options) { //2.每次调用发送ajax请 ...
- python爬虫:抓取下载视频文件,合并ts文件为完整视频
1.获取m3u8文件 2.代码 """@author :Eric-chen@contact :sygcrjgx@163.com@time :2019/6/16 15:32 ...
- Ubuntu下使用天河注意事项
把下载的.cgi登陆文件用文本编辑器打开,修改端口 用管理员权限打开.cgi才能绑定端口 $ gksu nautilus # browse files as root $ gksu gedit /et ...
- TortoiseGit操作之提交代码到远程库
1.在本地代码库的文件夹中,"右键" 2.GIT提交要求必须填写Commit message,请认真填写描述信息. 建议填写的变更项编号,如上图. 代码提交到本地的配置库中,然后p ...
- boost multi array
Boost MultiArray is a library that simplifies using arrays with multiple dimensions. 1. #include < ...
- 分布式消息中间件及RabbitMQ
分布式应用和集群: 从部署形态来看,它们都是多台机器或者多个进程部署,而且都是为了实现一个业务功能. 如果是一个业务被拆分成多个子业务部署在不同的服务器上,那就是分布式应用 如果是同一个业务部署在多台 ...
- spring-cloud:Hystrix熔断的使用示例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCl ...
- 【Python】用python -m http.server 8888搭建本地局域网
python -m http.server 8888 由于工作中经常会用到局域网中同事之间互传文件,当文件太大时,可以采用局域网ftp之类的方式进行传输. 这里采用python的一个服务,可以快速的搭 ...