jquery抓取网页内容(JavaHTML解析器解析获取Document对象的方式及方式详解 )
优采云 发布时间: 2022-03-18 06:10jquery抓取网页内容(JavaHTML解析器解析获取Document对象的方式及方式详解
)
Jsoup简介
jsoup 是一个 Java HTML 解析器,可以直接解析一个 URL 地址和 HTML 文本内容。它提供了一个非常省力的 API,用于通过 DOM、CSS 和类似 jQuery 的操作方法获取和操作数据。
Jsoup.jpg
官网地址:
官网还提供了一套用户指南(Cookbook),方便开发者学习。
Jsoup解析HTML得到一个Document对象,通过操作Document的属性来获取HTML页面的内容。因此,在开始之前,我们先介绍一下XML中Node、Element、Document等相关概念的区别,以防止概念使用混淆造成误用。
相关概念
public abstract class Node implements Cloneable
public class Element extends Node
public class Document extends Element
从Jsoup源码中对三者的定义可以看出如下树继承关系:
节点、元素、文档继承关系.png
节点
从上面的继承关系可以看出,文档中的一切都可以看作一个节点。节点的种类很多:属性节点(Attribute)、注释节点(Note)、文本节点(Text)、元素节点(Element)等。节点通常被称为这些各种节点的统称。
元素
元素是比节点更小的范围的定义。元素继承自节点,是节点的子集,所以元素也是节点,节点拥有的公共属性和方法也可以在元素中使用。
文档
文档继承自元素,该元素引用整个 HTML 文档的源内容。通过 System.out.println(document.toString());,可以在控制台打印网页的源内容。
相互转换
基于 Node、Element 和 Document 之间的“缠绵”关系,可以利用各个类中提供的方法,进行适当的转换,获取使用所需的对象。
用例
Jsoup解析Html获取Document对象的方式分为在线Url、Html文本字符串、文件三类,对应API如下
获取Document对象后,可以结合HTML源码,使用Jsoup提供的API,通过class、tag、id、attribute等相关属性获取对应的Element,进而获取需要的网页内容。
我们以Jsoup官网的Cookbook页面为例,解析获取页面目录的内容。
网页内容:
Jsoup Cookbook 网页.jpg
网页来源:
jsoup开发指南,jsoup中文使用手册,jsoup中文文档
jsoup » cookbook
jsoup Cookbook(中文版)
入门
输入
数据抽取
数据修改
html清理
jsoup html parser: copyright © 2009 - 2011 jonathan hedley
Jsoup解析:
import java.io.IOException;
import java.text.ParseException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
/**
* @author 亦枫
* @created_time 2016年1月5日
* @file_user_todo Java测试类
* @blog http://www.jianshu.com/users/1*敏*感*词*0186e3248/latest_articles
*/
public class JavaTest {
/**
* 入口函数
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
try {
//解析Url获取Document对象
Document document = Jsoup.connect("http://www.open-open.com/jsoup/").get();
//获取网页源码文本内容
System.out.println(document.toString());
//获取指定class的内容指定tag的元素
Elements liElements = document.getElementsByClass("content").get(0).getElementsByTag("li");
for (int i = 0; i < liElements.size(); i++) {
System.out.println(i + ". " + liElements.get(i).text());
}
} catch (IOException e) {
System.out.println("解析出错!");
e.printStackTrace();
}
}
}
解析结果: