欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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/

相关标签: jsoup