Jsoup简明教程
2021-03-13 11:35
标签:项目 ima 一个 转换 补全 abs cep 文件 字符串解析 jsoup是一个操纵HTML的Java库。它提供了很多便利的API,我们可以用HTML5 DOM方法和CSS选择器来获取URL,提取和操作数据。 先看一个简单的例子,新建一个Maven项目: 在项目的pom.xml文件中添加如下依赖: 确认项目下的External Libraries中包含如下jar包 我们的例子是提取到百度首页的标题,如下图所示: 使用jsoup库可以很容易做到这事儿, 结果如下: 通过 有多个方法获取到 该方法从字符串解析出一个 可以看到对于缺失的标签,jsoup库帮我们补全。 该方法从字符串解析出一个 该方法从目标URL解析出一个 该方法从文件中解析出一个 获取到了 在 还是用百度首页来举例: 我们 可以用下列方法提取元素的数据: 例如: 除了类DOM方法外,还可以使用CSS选择器语法对元素进行筛选,主要是用 如上例所示,通过 更多选择器语法请看Use selector-syntax to find elements。 有时我们需要将资源的相对路径转换为绝对路径,我们可以用如下两种方法: 了解了上述内容后,我们现在可以尝试爬取豆瓣电影TOP250啦! 观察其URL 可以看到每部电影都包含在一个class名为 抓取结果如下: Jsoup简明教程 标签:项目 ima 一个 转换 补全 abs cep 文件 字符串解析 原文地址:https://www.cnblogs.com/viljw/p/12819341.html
package com.andy;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class JsoupDemo {
public static void main(String[] args) throws IOException {
Document document = Jsoup.connect("http://www.baidu.com").get();
System.out.println(document.title());
}
}
Jsoup.connect("http://www.baidu.com").get()
我们获取到了百度首页的HTML文档并返回一个Document
对象(它就代表了HTML文档),使用Document
对象的title()
方法获取到了HTML文档的标题。获取Document对象
Document
对象。Jsoup.parse(String html)
Document
对象,Document document = Jsoup.parse("");
System.out.println(document);
Jsoup.parseBodyFragment(String html)
Document
对象,与Jsoup.parse(String html)
方法不同的是,此方法会将html
插入到body
标签中,Document document = Jsoup.parseBodyFragment("");
System.out.println(document);
Jsoup.connect(String url).get()
Document
对象,正如样例所示。Jsoup.parse(File in, String charset, String baseUri)
Document
对象,我们将百度首页的html文档保存到本地,然后用此方法得到一个Document
对象:File file = new File("./index.html");
Document document = Jsoup.parse(file, "UTF-8");
System.out.println(document);
提取数据
Document
对象有什么用呢?我们可以通过它的很方便的方法提取数据。DOM方法
Document
对象上我们可以使用一些类DOM方法,比如:
getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key)
File file = new File("./index.html");
Document document = Jsoup.parse(file, "UTF-8");
Elements elements = document.getElementsByTag("a");
for (Element element : elements) {
System.out.println(element);
}
getElementsByTag()
方法获取到了整个页面的a
元素,然后打印输出每个元素。
attr(String key)
获取元素key
属性的值attributes()
获取元素所有属性id()
获取元素id属性的值className
和classNames
获取元素class属性的值text()
获取元素内容File file = new File("./index.html");
Document document = Jsoup.parse(file, "UTF-8");
Elements elements = document.getElementsByTag("a");
for (Element element : elements) {
System.out.println(element.text() + " : " + element.attr("href"));
}
选择器方法
Element.select(String selector)
方法。File file = new File("./index.html");
Document document = Jsoup.parse(file, "UTF-8");
Elements elements = document.select("a[href]");
for (Element element : elements) {
System.out.println(element.text() + " : " + element.attr("href"));
}
select()
方法找到了所有带有href
属性的a
标签。值得注意的是,select()
方法可以在Document
,Element
或Elements
对象上使用。获取绝对路径
Document doc = Jsoup.connect("http://jsoup.org").get();
Element link = doc.select("a").first();
String relHref = link.attr("href"); // == "/"
String absHref = link.attr("abs:href"); // "http://jsoup.org/"
// 等价于
String absLink = link.absUrl("href") // "http://jsoup.org/"
爬取豆瓣电影TOP250
https://movie.douban.com/top250?start=0&filter=
,可以发现页数和URL是一一对应的,start
的值会等于当前页i
减1乘以25,即start=(i-1)*25
,因此通过改变start
的值就可以请求到不同的HTML页面。我们对页面上的每部电影信息做进一步分析:item
的div
标签中,作为示例我们这里只提取每部电影的标题和URL。完整代码如下所示:import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class JsoupDemo {
public static void main(String[] args){
String baseUrl = "https://movie.douban.com/top250?start=%d&filter=";
for (int i = 0; i a").first().attr("href");
System.out.println("title : " + title + " url : " + url);
}
}
}