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/

  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/itommy/p/10610368.html
Copyright © 2011-2022 走看看