天天看點

Java爬蟲之利用Jsoup自制簡單的搜尋引擎

  Jsoup 是一款Java 的HTML解析器,可直接解析某個URL位址、HTML文本内容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作資料。Jsoup的官方網址為: https://jsoup.org/ , 其API使用手冊網址為: https://jsoup.org/apidocs/overview-summary.html

.

  本次分享将實作的功能為:利用Jsoup爬取某個搜尋詞語(暫僅限英文)的百度百科的介紹部分,具體的功能介紹可以參考部落格:

Python爬蟲——自制簡單的搜尋引擎

。在上篇爬蟲中我們用Python進行爬取,這次,我們将用Java來做爬蟲,你沒看錯,就是Java.

  在Eclipse中加入Jsoup包,下載下傳網址為:

https://jsoup.org/download

.

  爬蟲的具體代碼如下:

package baiduScrape;

/* 
 * 本爬蟲主要利用Java的Jsoup包進行網絡爬取
 * 本爬蟲的功能: 爬取百度百科的開頭介紹部分
 * 使用方法: 輸入關鍵字(目前隻支援英文)即可
 */

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.net.*;
import java.io.*;
import java.util.Scanner;

public class BaiduScrape {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String baseUrl = "https://baike.baidu.com/item/";
        String url = "";

        // 如果輸入文字不是"exit",則爬取其百度百科的介紹部分,否則退出該程式
        while(true) {
            System.out.println("Enter the word(Enter 'exit' to exit):");
            url = input.nextLine();
            if(url.equals("exit")) {
                System.out.println("The program is over.");
                break;
            }
            String introduction = getContent(baseUrl+url);
            System.out.println(introduction+'\n');
        }
    }

    // getContent()函數主要實作爬取輸入文字的百度百科的介紹部分
    public static String getContent(String url){
        // 利用URL解析網址
        URL urlObj = null;
        try{
            urlObj = new URL(url);

        }
        catch(MalformedURLException e){
            System.out.println("The url was malformed!");
            return "";
        }

        // URL連接配接
        URLConnection urlCon = null;
        try{
            urlCon = urlObj.openConnection(); // 打開URL連接配接
            // 将HTML内容解析成UTF-8格式
            Document doc = Jsoup.parse(urlCon.getInputStream(), "utf-8", url);
            // 刷選需要的網頁内容
            String contentText = doc.select("div.lemma-summary").first().text();
            // 利用正規表達式去掉字元串中的"[數字]"
            contentText = contentText.replaceAll("\\[\\d+\\]", "");
            return contentText;
        }catch(IOException e){
            System.out.println("There was an error connecting to the URL");
            return "";
        }

    }
}           

在上述代碼中,url為輸入詞條(暫時僅限于英文),進入while循環可一直搜尋,當輸入為’exit’時退出。contentText為該詞條的百度百科簡介的網頁形式,通過正規表達式将其中的文字提取出來。代碼雖然簡潔,但是功能還是蠻強大的,充分說明Java也是可以做爬蟲的。

  接下來是愉快的測試時間:

  本次分享到此結束,接下來也會持續更新Jsoup方面的相關知識,歡迎大家交流~~