App下載

Java爬蟲入門:如何用Java抓取網(wǎng)頁數(shù)據(jù)

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

爬蟲是什么?

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

Java可以寫爬蟲嗎?

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

Java爬蟲案例

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

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è)方法,用來發(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);
    // 打開一個(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());
    }
}

接下來,我們定義一個(gè)方法,用來從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è)主方法,用來調(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é)

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

0 人點(diǎn)贊