jsoup用法
Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
jsoup主要功能如下:
从一个 URL,文件或中解析 HTML;
使用 DOM 或 CSS 选择器来查找、取出数据;
可操作 HTML 元素、属性、文本;
依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
解析HTML方式
第一种
从URL 中加载HTML
// get请求
Document document = Jsoup.connect("http://www.baidu.com").get();
// post 请求
Document document = Jsoup.connect("http://www.baidu.com").post();
第二种
从字符串中加载 HTML
Document document2 = Jsoup.parse("<html><head><title>First parse</title></head>\"\n" +
"+ \"<body><p>Parsed HTML into a doc.</p></body></html>");
第三种
从文件中加载 HTML
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对象来设置一些请求信息
常用方法
// 请求参数
conn.data();
// 添加请求头
conn.header();
// 添加请求cookie
conn.cookie();
// 设置超时时间
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.获取标签
// 获取 id
document.getElementById(“id”);
// 获取 class
document.getElementsByClass(“class”);
// 获取标签
document.getElementsByTag(“a”);
4.获取属性
element.attr(“href”)//获取href属性
document.select()方法
// 获取 扩展名 带有 .png 的 img 元素
document.select("img[src$=.png]");
// 获取 有 href 属性的 超链接元素
document.select("a[href]");
element.text() 获取该标签的内容
element.html() 包括内容和内容html标签
element.outerHtml(): 本身标签再加上内容
实例
爬取京东书籍
public void find(String goods) throws IOException {
Document document = Jsoup.connect("http://search.jd.com/Search?keyword="+goods).get();
Element div = document.getElementById("J_goodsList");
Elements li = div.getElementsByTag("li");
for (Element element : li) {
String img = element.getElementsByTag("img").attr("data-lazy-img");
String name = element.getElementsByClass("p-name").text();
String price = element.getElementsByClass("p-price").text();
System.out.println(img);
System.out.println(name);
System.out.println(price);
}
}