jsoup用法

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

jsoup主要功能如下:

从一个 URL,文件或中解析 HTML;
使用 DOM 或 CSS 选择器来查找、取出数据;
可操作 HTML 元素、属性、文本;

依赖

  1. <dependency>
  2. <groupId>org.jsoup</groupId>
  3. <artifactId>jsoup</artifactId>
  4. <version>1.11.3</version>
  5. </dependency>

解析HTML方式

第一种

从URL 中加载HTML

  1. // get请求
  2. Document document = Jsoup.connect("http://www.baidu.com").get();
  3. // post 请求
  4. Document document = Jsoup.connect("http://www.baidu.com").post();

第二种

从字符串中加载 HTML

  1. Document document2 = Jsoup.parse("<html><head><title>First parse</title></head>\"\n" +
  2. "+ \"<body><p>Parsed HTML into a doc.</p></body></html>");

第三种

从文件中加载 HTML

  1. Document document3 = Jsoup.parse(new File("C:\\Users\\小布蛋\\Desktop\\Hello.html"), String.valueOf(StandardCharsets.UTF_8));

其中:

Jsoup.connect(“xxx”)方法返回一个org.jsoup.Connection对象。

在Connection对象中,我们可以执行get和post来执行请求。但在执行请求之前,我们可以使用Connection对象来设置一些请求信息

常用方法

  1. // 请求参数
  2. conn.data();
  3. // 添加请求头
  4. conn.header();
  5. // 添加请求cookie
  6. conn.cookie();
  7. // 设置超时时间
  8. conn.timeout();

Document

什么是Document?

每个载入浏览器的 HTML 文档都会成为 Document对象

Document对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问

Documnet 对象是 Window 对象的一部分,可通过 window.document属性对其进行访问

Element

Element是 Documnet的子类,Document 是许多个Element组成的

在 HTML DOM 中 , Element 对象表示 HTML 元素

Element 对象可以拥有类型为 元素节点,文本节点,注释节点的子节点。

溯源也可以拥有属性,属性是属性节点

Node

什么是Node

在 HTML DOM (文档对象模型)中,每个部分都是节点:
文档本身是文档节点
所有 HTML 元素是元素节点
所有 HTML 属性是属性节点
HTML 元素内的文本是文本节点
注释是注释节点

documnet,element 都是节点

document常用方法

获取html 获取body 获取head

  • document.title()

  • document.head()

3.获取标签

  1. // 获取 id
  2. document.getElementById(“id”);
  3. // 获取 class
  4. document.getElementsByClass(“class”);
  5. // 获取标签
  6. document.getElementsByTag(“a”);

4.获取属性

  1. element.attr(“href”)//获取href属性

document.select()方法
  1. // 获取 扩展名 带有 .png 的 img 元素
  2. document.select("img[src$=.png]");
  1. // 获取 有 href 属性的 超链接元素
  2. document.select("a[href]");

element.text() 获取该标签的内容

element.html() 包括内容和内容html标签

element.outerHtml(): 本身标签再加上内容

实例

爬取京东书籍

  1. public void find(String goods) throws IOException {
  2. Document document = Jsoup.connect("http://search.jd.com/Search?keyword="+goods).get();
  3. Element div = document.getElementById("J_goodsList");
  4. Elements li = div.getElementsByTag("li");
  5. for (Element element : li) {
  6. String img = element.getElementsByTag("img").attr("data-lazy-img");
  7. String name = element.getElementsByClass("p-name").text();
  8. String price = element.getElementsByClass("p-price").text();
  9. System.out.println(img);
  10. System.out.println(name);
  11. System.out.println(price);
  12. }
  13. }