文档章节

Java使用Jsoup简单解析页面

乐在克里特
 乐在克里特
发布于 2017/02/24 11:31
字数 360
阅读 49
收藏 2
点赞 0
评论 1

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/

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 265
码字总数 394729
作品 0
杭州
程序员
加载中

评论(1)

无极之岚
无极之岚
大兄弟 你也是做人行征信的啊
Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

sharding-jdbc源码分析—准备工作

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7831817c1da8 接下来对sharding-jdbc源码的分析基于tag为源码,根据sharding-jdbc Features深入学习sharding-jdbc的几个主要特性...

飞哥-Javaer ⋅ 05/03 ⋅ 0

sharding-jdbc源码解析全集

sharding-jdbc源码解析之词法解析 sharding源码解析之api分析 sharding-jdbc源码解析之spring集成 sharding-jdbc源码解析之spring集成分片构造实现 sharding-jdbc源码解析之jdbc规范重写 sh...

天河2018 ⋅ 05/03 ⋅ 0

结合JVM源码谈Java类加载器

一、前言 之前文章 Java 类加载器揭秘 从Java层面讲解了Java类加载器的原理,这里我们结合JVM源码在稍微深入讲解下。 二、Java类加载器的委托机制 Java 类加载器使用的是委托机制,也就是一个...

阿里加多 ⋅ 04/29 ⋅ 0

两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义 ⋅ 06/12 ⋅ 0

你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan ⋅ 04/25 ⋅ 0

Groovy 2018 Roadmap:下一步主打 lambda 和模块化

JVM 动态脚本语言 Groovy 在 5 月底发布了最新的 2.5 版本, 最大的亮点是对宏的支持,允许开发者在创建 compile-time 元编程扩展时直接使用 Groovy 语法,而不是使用内部编译器表示。 Apac...

王练 ⋅ 06/07 ⋅ 0

sharding-jdbc分库分表规则(1)-单表查询

前言 当数据量到达一定数量级的时候,一般都会考虑分库分表。sharding-jdbc是一个开源的客户端分库分表基础类库,以一个jar包的形式提供,基于原生的JDBC驱动进行增强,基本能够无缝整合旧代...

xiaomin0322 ⋅ 06/07 ⋅ 0

Java虚拟机--一个类如何加载?

文末有彩蛋!!!!!! 类加载 对于虚拟机来说,一个对象的创建十分复杂,包含了很多步骤。首先,我们要从类加载说起。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期...

贾博岩 ⋅ 04/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 6分钟前 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 9分钟前 ⋅ 0

Nginx + uwsgi @ubuntu

Nginx 安装 & 启动 sudo apt-get install nginx  #安装fnngj@ubuntu:~$ /etc/init.d/nginx start  #启动fnngj@ubuntu:~$ /etc/init.d/nginx stop  #关闭fnngj@ubuntu:~$ /etc/init.d/......

袁祾 ⋅ 10分钟前 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 13分钟前 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 20分钟前 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 48分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 今天 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 今天 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部