原文地址:https://xeblog.cn/articles/27
Jsoup簡介
Jsoup官網(wǎng):https://jsoup.org/
jsoup 是一款Java 的HTML解析器坏快,可直接解析某個URL地址枣氧、HTML文本內容今魔。它提供了一套非常省力的API,可通過DOM率触,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)母蛛。
分析網(wǎng)頁
瀏覽器打開愛奇藝高分電影排行榜的地址 https://www.iqiyi.com/dianying_new/i_list_paihangbang.html?type=2铭污,按 F12
審查元素。
仔細觀察后可以知道 data-seq
屬性是用于區(qū)分排行榜類型的寿羞,值為1表示是熱播榜,值為2表示是高分榜赂蠢。
查看高分榜的 <div>
標簽绪穆,里面存在一個 <ul>
標簽,<ul>
標簽中的每一個 <li>
標簽都是一部電影的信息虱岂。
在 <li>
標簽里通過獲取一個ClassName為 site-title_score
的 <div>
標簽就可以得到電影的評分玖院、電影的名字、電影的視頻地址等信息第岖。
各個信息的獲取方式:
-
電影評分:獲取這個
<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;
/**
* 爬取愛奇藝高分電影排行榜數(shù)據(jù)
*
* @author anlingyi
*/
public class HighScoreMoviesByIQIYI {
/**
* 網(wǎng)址
*/
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請求獲取指定的網(wǎng)址內容,并將內容解析為一個文檔對象键袱,設置請求超時時間
Document document = Jsoup.connect(URL).timeout(TIMEOUT).get();
// 獲取高分榜的元數(shù)據(jù)燎窘,先通過data-seq屬性的值(高分榜值為2)來定位元素節(jié)點,再通過ClassName精確查找出需要的數(shù)據(jù)
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視頻地址");
// 遍歷元數(shù)據(jù)
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);
}
}
}