zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    产品经理的未来在哪里
    如何打造一款成功的产品
    彻底解决Android 应用方法数不能超过65K的问题
    MVC,MVP 和 MVVM 的图示
    oracle最高账号sys的密码认证模式
    Android开发者必须深入学习的10个应用开源项目
    Android程序完全退出的三种方法
    Android-监听网络状态
    Android开发图片分辨率问题解决方案
    Android清除本地数据缓存代码
  • 原文地址:https://www.cnblogs.com/itommy/p/10610368.html
Copyright © 2011-2022 走看看