Java使用Jsoup简单解析页面
程序员文章站
2024-01-18 09:44:46
...
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/