原文地址:https://xeblog.cn/articles/27
Jsoup简介
Jsoup官网:https://jsoup.org/
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
分析网页
浏览器打开爱奇艺高分电影排行榜的地址 https://www.iqiyi.com/dianying_new/i_list_paihangbang.html?type=2,按 F12
审查元素。
仔细观察后可以知道 data-seq
属性是用于区分排行榜类型的,值为1表示是热播榜,值为2表示是高分榜。
image
查看高分榜的 <div>
标签,里面存在一个 <ul>
标签,<ul>
标签中的每一个 <li>
标签都是一部电影的信息。
image
在 <li>
标签里通过获取一个ClassName为 site-title_score
的 <div>
标签就可以得到电影的评分、电影的名字、电影的视频地址等信息。
image
各个信息的获取方式:
-
电影评分:获取这个
<div>
内的<span>
标签的文本内容。 -
电影名称:获取这个
<div>
内的<a>
标签的文本内容。 -
电影地址:获取这个
<div>
内的<a>
标签的href
属性的值。
编写代码
添加 Maven
依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
package cn.xeblog.jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
/**
* 爬取爱奇艺高分电影排行榜数据
*
* @author anlingyi
*/
public class HighScoreMoviesByIQIYI {
/**
* 网址
*/
private static final String URL = "https://www.iqiyi.com/dianying_new/i_list_paihangbang.html?type=2";
/**
* 请求超时时间,15秒
*/
private static final int TIMEOUT = 15000;
public static void main(String[] args) throws IOException {
// Get请求获取指定的网址内容,并将内容解析为一个文档对象,设置请求超时时间
Document document = Jsoup.connect(URL).timeout(TIMEOUT).get();
// 获取高分榜的元数据,先通过data-seq属性的值(高分榜值为2)来定位元素节点,再通过ClassName精确查找出需要的数据
Elements metaData = document.getElementsByAttributeValue("data-seq", "2")
// 第0个元素是Tab导航,所以从第二个元素开始查找
.get(1)
// 获取ClassName为site-title_score的元素,可以获取到电影评分、电影名、视频地址
.getElementsByClass("site-title_score");
System.out.println("电影名\t\t\t电影评分\t\t\t视频地址");
// 遍历元数据
for (Element element : metaData) {
// 通过<span>标签可以获取电影评分
String score = element.select("span").text();
// 通过<a>标签可以获取电影名和视频地址
Element data = element.selectFirst("a");
// 电影名
String name = data.text();
// 视频地址
String url = data.attr("href");
System.out.println(name + "\t\t\t" + score + "\t\t\t" + url);
}
}
}
爬取结果
image