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方面的相關知識,歡迎大家交流~~