jsoup

jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
jsoup 的主要功能如下:

  1. 从一个 URL,文件或字符串中解析 HTML;
  2. 使用 DOM 或 CSS 选择器来查找、取出数据;
  3. 可操作 HTML 元素、属性、文本;
    jsoup 是基于 MIT 协议发布的,可放心使用于商业项目。
    jsoup 的类层次结构

其中,要被解析的HTML可以是一个HTML的字符串,可以是一个URL,可以是一个文件。
org.jsoup.Jsoup把输入的HTML转换成一个org.jsoup.nodes.Document对象,然后从Document对象中取出想要的元素。
org.jsoup.nodes.Document继承了org.jsoup.nodes.Element,Element又继承了org.jsoup.nodes.Node类。里面提供了丰富的方法来获取HTML的元素。
下面是几种常见的应用场景举例说明 jsoup 是如何进行 HTML 文档处理的。
文档输入
jsoup 可以从包括字符串、URL 地址以及本地文件来加载 HTML 文档,并生成 Document 对象实例。

 // 直接从字符串中输入 HTML 文档
 String html = "<html><head><title> 开源中国社区 </title></head>"
  + "<body><p> 这里是 jsoup 项目的相关文章 </p></body></html>"; 
 Document doc = Jsoup.parse(html); 

// 从 URL 直接加载 HTML 文档

 Document doc = Jsoup.connect("http://www.oschina.net/").get(); 
 String title = doc.title(); 

其中Jsoup.connect(“xxx”)方法返回一个org.jsoup.Connection对象。
在Connection对象中,我们可以执行get或者post来执行请求。
但是在执行请求之前我们可以使用Connection对象来设置一些请求信息。比如:头信息,cookie,请求等待时间,代理等等来模拟浏览器的行为。

Document doc = Jsoup.connect("http://www.oschina.net/")
  .data("query", "Java")// 请求参数,传参
  .userAgent("Mozilla")// 设置 User-Agent ,伪装成浏览器
  .cookie("auth", "token")// 设置 cookie,添加cookie信息
  .timeout(3000)// 设置连接超时时间
  .post();// 使用 POST 方法访问 URL 

解析并提取 HTML 元素
这部分涉及一个 HTML 解析器最基本的功能,但 jsoup 使用一种有别于其他开源项目的方式——选择器,不过 jsoup 也提供了传统的 DOM 方式的元素解析。

//从本地文件中,通过Id,获取下面的标签
 File input = new File("E:/test.html"); 
 Document doc = Jsoup.parse(input, "UTF-8"); 
 Element content = doc.getElementById("content"); 
 Elements links = content.getElementsByTag("a"); 
 for (Element link : links) { 
  String linkHref = link.attr("href"); 
  String linkText = link.text(); 
 }

可能会觉得 jsoup 的方法似曾相识,没错,像 getElementById 和 getElementsByTag 方法跟 JavaScript 的方法名称是一样的,功能也完全一致。你可以根据节点名称或者是 HTML 元素的 id 来获取对应的元素或者元素列表。
与 htmlparser 项目不同的是,jsoup 并没有为 HTML 元素定义一个对应的类,一般一个 HTML 元素的组成部分包括:节点名、属性和文本,jsoup 提供简单的方法供你自己检索这些数据。
getElementById(String id):通过id来获取
  getElementsByTag(String tagName):通过标签名字来获取
  getElementsByClass(String className):通过类名来获取
  getElementsByAttribute(String key):通过属性名字来获取
  getElementsByAttributeValue(String key, String value):通过指定的属性名字,属性值来获取
  getAllElements():获取所有元素
通过类似于css或jQuery的选择器来查找元素
使用的是Element类的下记方法:
public Elements select(String cssQuery)
通过传入一个类似于CSS或jQuery的选择器字符串,来查找指定元素。

public void test4() throws IOException {
    File input = new File("e:/test.html");
    Document doc = Jsoup.parse(input,"UTF-8");
    Elements links = doc.select("a[href]"); // 找出具有 href 属性的链接
    Elements pngs = doc.select("img[src$=.png]");// 找出所有png 图片的元素
    Element masthead = doc.select("div.headline").first();// 找出定义了 class="headline" 的元素
    Elements resultLinks = doc.select("h3.simple-item__title > a"); // 找出了h3标签下的a标签
    System.out.println(links);
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值