Jsoup爬取爱奇艺高分电影排行榜数据

1,716 阅读2分钟

原文地址:xeblog.cn/articles/27

Jsoup简介

Jsoup官网:jsoup.org/

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

分析网页

浏览器打开爱奇艺高分电影排行榜的地址 www.iqiyi.com/dianying_ne…,按 F12 审查元素。

仔细观察后可以知道 data-seq 属性是用于区分排行榜类型的,值为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;

/**
 * 爬取爱奇艺高分电影排行榜数据
 *
 * @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);
        }
    }
}

爬取结果