App下載

如何使用java爬取豆瓣top250書(shū)籍案例

偷得浮生 2023-07-09 09:30:00 瀏覽數(shù) (2331)
反饋

你是否想過(guò)用java編程來(lái)獲取豆瓣上的圖書(shū)信息呢?如果你對(duì)這個(gè)話(huà)題感興趣,那么本文就是為你準(zhǔn)備的。本文將介紹如何使用java爬取豆瓣top250書(shū)籍的案例,包括爬蟲(chóng)的原理、步驟和代碼。希望通過(guò)本文,你能夠?qū)W習(xí)到一些有用的技巧和知識(shí),以及對(duì)java爬蟲(chóng)有一個(gè)更深入的了解。

爬蟲(chóng)的原理

爬蟲(chóng),也叫網(wǎng)絡(luò)爬蟲(chóng)或網(wǎng)頁(yè)抓取,是一種自動(dòng)從互聯(lián)網(wǎng)上獲取數(shù)據(jù)的程序。爬蟲(chóng)的基本工作流程如下:

  1. 首先,爬蟲(chóng)需要一個(gè)起始的URL,也就是要爬取的網(wǎng)頁(yè)的地址。例如,我們要爬取豆瓣top250書(shū)籍的網(wǎng)頁(yè),那么起始的URL就是https://book.douban.com/top250。
  2. 然后,爬蟲(chóng)會(huì)發(fā)送一個(gè)HTTP請(qǐng)求到起始的URL,獲取網(wǎng)頁(yè)的源代碼。源代碼是網(wǎng)頁(yè)的基本組成部分,包含了網(wǎng)頁(yè)的內(nèi)容、結(jié)構(gòu)和樣式等信息。
  3. 接著,爬蟲(chóng)會(huì)解析網(wǎng)頁(yè)的源代碼,提取出我們感興趣的數(shù)據(jù)。例如,我們要提取豆瓣top250書(shū)籍的標(biāo)題、作者、評(píng)分和簡(jiǎn)介等信息。
  4. 最后,爬蟲(chóng)會(huì)將提取出的數(shù)據(jù)存儲(chǔ)到本地或者數(shù)據(jù)庫(kù)中,以便后續(xù)的分析和使用。

爬蟲(chóng)的步驟

為了實(shí)現(xiàn)用java爬取豆瓣top250書(shū)籍的案例,我們需要完成以下幾個(gè)步驟:

  1. 創(chuàng)建一個(gè)java項(xiàng)目,并導(dǎo)入相關(guān)的依賴(lài)庫(kù)。我們需要用到j(luò)soup和json兩個(gè)庫(kù),分別用于解析HTML和JSON格式的數(shù)據(jù)。
  2. 編寫(xiě)一個(gè)Book類(lèi),用于封裝書(shū)籍的屬性和方法。我們需要定義書(shū)籍的標(biāo)題、作者、評(píng)分、簡(jiǎn)介等屬性,以及一個(gè)構(gòu)造方法和一個(gè)toString方法。
  3. 編寫(xiě)一個(gè)Spider類(lèi),用于實(shí)現(xiàn)爬蟲(chóng)的邏輯。我們需要定義一個(gè)常量URL,表示要爬取的網(wǎng)頁(yè)地址。然后,我們需要定義一個(gè)getBooks方法,用于獲取所有書(shū)籍的列表。在這個(gè)方法中,我們需要做以下幾件事:
    • 使用jsoup連接到URL,并獲取網(wǎng)頁(yè)的文檔對(duì)象。
    • 使用jsoup選擇器選擇所有包含書(shū)籍信息的元素,并遍歷它們。
    • 對(duì)于每個(gè)元素,使用jsoup選擇器提取出書(shū)籍的標(biāo)題、作者、評(píng)分和簡(jiǎn)介等信息,并創(chuàng)建一個(gè)Book對(duì)象。
    • 將Book對(duì)象添加到一個(gè)ArrayList中,并返回這個(gè)列表。
  4. 編寫(xiě)一個(gè)Main類(lèi),用于測(cè)試爬蟲(chóng)的效果。我們需要?jiǎng)?chuàng)建一個(gè)Spider對(duì)象,并調(diào)用它的getBooks方法。然后,我們需要遍歷返回的書(shū)籍列表,并打印出每本書(shū)籍的信息。

爬蟲(chóng)的代碼

下面是用java爬取豆瓣top250書(shū)籍案例的完整代碼:

Spider類(lèi):

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


import java.io.IOException;
import java.util.ArrayList;


public class Spider {


    // 要爬取的網(wǎng)頁(yè)地址
    public static final String URL = "https://book.douban.com/top250";


    // 獲取所有書(shū)籍的列表
    public ArrayList<Book> getBooks() {
        ArrayList<Book> books = new ArrayList<>();
        try {
            // 連接到URL,并獲取網(wǎng)頁(yè)的文檔對(duì)象
            Document doc = Jsoup.connect(URL).get();
            // 選擇所有包含書(shū)籍信息的元素
            Elements elements = doc.select("div.article > div.indent > table");
            // 遍歷每個(gè)元素
            for (Element element : elements) {
                // 提取書(shū)籍的標(biāo)題
                String title = element.select("div.pl2 > a").attr("title");
                // 提取書(shū)籍的作者
                String author = element.select("p.pl").text().split("/")[0];
                // 提取書(shū)籍的評(píng)分
                String rating = element.select("span.rating_nums").text();
                // 提取書(shū)籍的簡(jiǎn)介
                String summary = element.select("span.inq").text();
                // 創(chuàng)建一個(gè)Book對(duì)象
                Book book = new Book(title, author, rating, summary);
                // 將Book對(duì)象添加到列表中
                books.add(book);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return books;
    }
}

Book類(lèi):

public class Book {


    // 書(shū)籍的屬性
    private String title; // 標(biāo)題
    private String author; // 作者
    private String rating; // 評(píng)分
    private String summary; // 簡(jiǎn)介


    // 書(shū)籍的構(gòu)造方法
    public Book(String title, String author, String rating, String summary) {
        this.title = title;
        this.author = author;
        this.rating = rating;
        this.summary = summary;
    }


    // 書(shū)籍的toString方法,用于打印書(shū)籍的信息
    @Override
    public String toString() {
        return "Book{" +
                "title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", rating='" + rating + '\'' +
                ", summary='" + summary + '\'' +
                '}';
    }
}

驅(qū)動(dòng)程序:

public class Main {


    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)Spider對(duì)象
        Spider spider = new Spider();
        // 調(diào)用Spider對(duì)象的getBooks方法,獲取所有書(shū)籍的列表
        ArrayList<Book> books = spider.getBooks();
        // 遍歷書(shū)籍列表,并打印每本書(shū)籍的信息
        for (Book book : books) {
            System.out.println(book);
        }
    }
}

0 人點(diǎn)贊