App下載

Java爬蟲(chóng)入門(mén):如何用Java抓取網(wǎng)頁(yè)數(shù)據(jù)

一級(jí)燒烤品鑒師 2023-07-09 09:30:00 瀏覽數(shù) (2955)
反饋

爬蟲(chóng)是什么?

爬蟲(chóng),也叫網(wǎng)絡(luò)爬蟲(chóng)或網(wǎng)頁(yè)抓取,是一種自動(dòng)從互聯(lián)網(wǎng)上獲取信息的程序或者腳本。爬蟲(chóng)可以根據(jù)一定的規(guī)則,模擬瀏覽器的行為,訪問(wèn)指定的網(wǎng)站,抓取網(wǎng)頁(yè)上的數(shù)據(jù),并進(jìn)行存儲(chǔ)或分析。

Java可以寫(xiě)爬蟲(chóng)嗎?

Java是一種廣泛使用的編程語(yǔ)言,具有跨平臺(tái)、面向?qū)ο?、高性能等特點(diǎn)。Java也可以用來(lái)編寫(xiě)爬蟲(chóng)程序,因?yàn)镴ava提供了很多網(wǎng)絡(luò)編程和數(shù)據(jù)處理的類(lèi)庫(kù),例如HttpURLConnection, Jsoup, HttpClient等。使用這些類(lèi)庫(kù),可以方便地發(fā)送HTTP請(qǐng)求,解析HTML文檔,提取所需的數(shù)據(jù)。

Java爬蟲(chóng)案例

下面給出一個(gè)簡(jiǎn)單的Java爬蟲(chóng)案例,用來(lái)抓取百度搜索結(jié)果的標(biāo)題和鏈接。首先,我們需要導(dǎo)入以下幾個(gè)類(lèi)庫(kù):

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

然后,我們定義一個(gè)方法,用來(lái)發(fā)送HTTP請(qǐng)求,并返回響應(yīng)的HTML文檔:

public static Document getHtml(String url) throws IOException {
    // 創(chuàng)建一個(gè)URL對(duì)象
    URL u = new URL(url);
    // 打開(kāi)一個(gè)HTTP連接
    HttpURLConnection conn = (HttpURLConnection) u.openConnection();
    // 設(shè)置請(qǐng)求方法為GET
    conn.setRequestMethod("GET");
    // 設(shè)置連接超時(shí)和讀取超時(shí)時(shí)間
    conn.setConnectTimeout(5000);
    conn.setReadTimeout(5000);
    // 判斷響應(yīng)碼是否為200
    if (conn.getResponseCode() == 200) {
        // 使用Jsoup解析HTML文檔
        Document doc = Jsoup.parse(conn.getInputStream(), "utf-8", url);
        // 關(guān)閉連接
        conn.disconnect();
        // 返回文檔對(duì)象
        return doc;
    } else {
        // 拋出異常
        throw new IOException("請(qǐng)求失敗,響應(yīng)碼為" + conn.getResponseCode());
    }
}

接下來(lái),我們定義一個(gè)方法,用來(lái)從HTML文檔中提取搜索結(jié)果的標(biāo)題和鏈接:

public static void parseHtml(Document doc) {
    // 選擇所有包含搜索結(jié)果的div元素
    Elements results = doc.select("div.result");
    // 遍歷每個(gè)div元素
    for (Element result : results) {
        // 選擇標(biāo)題中的a元素
        Element title = result.selectFirst("h3 a");
        // 獲取標(biāo)題文本和鏈接地址
        String text = title.text();
        String link = title.attr("href");
        // 打印標(biāo)題和鏈接
        System.out.println(text);
        System.out.println(link);
    }
}

最后,我們定義一個(gè)主方法,用來(lái)調(diào)用上面的兩個(gè)方法,并傳入一個(gè)搜索關(guān)鍵詞:

public static void main(String[] args) throws IOException {
    // 定義一個(gè)搜索關(guān)鍵詞
    String keyword = "java";
    // 拼接百度搜索的URL地址
    String url = "https://www.baidu.com/s?wd=" + keyword;
    // 調(diào)用getHtml方法,獲取HTML文檔對(duì)象
    Document doc = getHtml(url);
    // 調(diào)用parseHtml方法,解析HTML文檔,并打印搜索結(jié)果
    parseHtml(doc);
}

小結(jié)

很多人一聽(tīng)到爬蟲(chóng)第一反應(yīng)就是python,beautifulsoup等,固執(zhí)地認(rèn)為爬蟲(chóng)就應(yīng)該學(xué)python。但實(shí)際上爬蟲(chóng)可以用其他語(yǔ)言實(shí)現(xiàn),比如本文提到的java,甚至可以使用C/C++去實(shí)現(xiàn)。一些技術(shù)并不是只有某些語(yǔ)言能特定實(shí)現(xiàn),只不過(guò)python實(shí)現(xiàn)更易于被人接受而已。希望本文能給你帶來(lái)一個(gè)全新的視角,不再局限于使用python編寫(xiě)爬蟲(chóng)!

0 人點(diǎn)贊