Java使用Jsoup簡單解析頁面

jsoup 是一款 Java 的 HTML 解析器,可直接解析某個 URL 地址、HTML 文本內容。它提供了一套很是省力的 API,可經過 DOM,CSS 以及相似於 jQuery 的操做方法來取出和操做數據。html

jsoup 的主要功能以下:java

1. 從一個 URL,文件或字符串中解析 HTML;spa

2. 使用 DOM 或 CSS 選擇器來查找、取出數據;code

3. 可操做 HTML 元素、屬性、文本;htm

實戰代碼:blog

@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.htmlelement

官網:pdo

https://jsoup.org/字符串

相關文章
相關標籤/搜索