更新時間:2022-10-12 11:19:10 來源:動力節點 瀏覽1675次
這篇文章展示了如何使用 Java 制作一個簡單的 Web 爬蟲原型。制作一個網絡爬蟲并不像聽起來那么困難。只需按照指南,您將在 1 小時或更短的時間內快速到達那里,然后享受它可以為您獲取的大量信息。由于這只是一個原型,您需要花更多的時間來定制它以滿足您的需求。
以下是本教程的先決條件:
基本的Java編程
一點關于 SQL 和 MySQL 數據庫的知識。
如果不想使用數據庫,可以使用文件來跟蹤爬取歷史。
在本教程中,目標如下:
給定一個學校根 URL,例如“mit.edu”,返回該學校包含字符串“research”的所有頁面
典型的爬蟲按以下步驟工作:
解析根網頁(“mit.edu”),并從該頁面獲取所有鏈接。為了訪問每個 URL 并解析 HTML 頁面,我將使用JSoup,它是一個用 Java 編寫的方便的網頁解析器。
使用從步驟 1 中檢索到的 URL,并解析這些 URL
在做上述步驟的時候,我們需要跟蹤之前處理過哪個頁面,這樣每個網頁只被處理一次。這就是我們需要數據庫的原因。
如果您使用的是 Ubuntu,您可以按照本指南安裝 Apache、MySQL、PHP 和 phpMyAdmin。
如果您使用的是 Windows,則可以簡單地使用 WampServer。您可以從 wampserver.com 簡單地下載它并在一分鐘內安裝它,然后就可以進行下一步了。wampserver 。com并在一分鐘內安裝它,很好地進行下一步。
我將使用 phpMyAdmin 來操作 MySQL 數據庫。它只是一個使用 MySQL 的 GUI 界面。如果您使用任何其他工具或不使用 GUI 工具,那完全沒問題。
創建一個名為“Crawler”的數據庫并創建一個名為“Record”的表,如下所示:
CREATE TABLE IF NOT EXISTS `Record` (
`RecordID` int(11) NOT NULL AUTO_INCREMENT,
`URL` text NOT NULL,
PRIMARY KEY (`RecordID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
(1)從 http://jsoup.org/download 下載 JSoup 核心庫。從 http://dev.mysql.com/downloads/connector/j/ 下載 mysql-connector-java-xxxbin.jarhttp :// jsoup 。組織/下載。http ://開發。mysql 。com /下載/連接器/ j /
(2)現在在您的 Eclipse 中創建一個名為“Crawler”的項目,并將您下載的 JSoup 和 mysql-connector jar 文件添加到 Java Build Path。(右鍵單擊項目-->選擇“構建路徑”->“配置構建路徑”->單擊“庫”選項卡->單擊“添加外部 JAR”)
(3)創建一個名為“DB”的類,用于處理數據庫操作。
導入 java.sql.Connection ;
導入 java.sql.DriverManager ;
導入 java.sql.ResultSet ;
導入 java.sql.SQLException ;
導入 java.sql.Statement ;
公共 類數據庫{
公共 連接conn = null ;
公共數據庫() {
嘗試 {
類。forName ( "com.mysql.jdbc.Driver" ) ;
字符串url = "jdbc:mysql://localhost:3306/Crawler" ;
conn = 驅動程序管理器。getConnection (網址,“root”,“admin213” );
系統。出來。println ( "conn built" ) ;
} 捕捉 (SQLException e ) {
e。打印堆棧跟蹤();
} 捕捉 (ClassNotFoundException e ) {
e。打印堆棧跟蹤();
}
}
public ResultSet runSql ( String sql ) throws SQLException {
Statement sta = conn. 創建語句();
返回站 執行查詢( sql );
}
public boolean runSql2 ( String sql ) throws SQLException {
Statement sta = conn. 創建語句();
返回站 執行( sql );
}
@覆蓋
protected void finalize ( ) throws Throwable {
if ( conn != null || ! conn.isClosed ( ) ) { conn
. 關閉( ) ;
}
}
}
(4)創建一個名為“Main”的類,這將是我們的爬蟲。
導入 java.io.IOException ;
導入 java.sql.PreparedStatement ;
導入 java.sql.ResultSet ;
導入 java.sql.SQLException ;
導入 java.sql.Statement ;
導入 org.jsoup.Jsoup ;
導入 org.jsoup.nodes.Document ;
導入 org.jsoup.nodes.Element ;
導入 org.jsoup.select.Elements ;
公共 類主{
公共 靜態數據庫數據庫= 新數據庫();
public static void main ( String [ ] args ) 拋出 SQLException , IOException {
db. runSql2 ( "TRUNCATE 記錄;" ) ;
進程頁面(“http://www.mit.edu” http :// www 。麻省理工學院 教育“);
}
public static void processPage ( String URL ) throws SQLException , IOException {
//檢查給定的 URL 是否已經在數據庫中
String sql = "select * from Record where URL = '" + URL + "'" ;
結果集rs = db。運行Sql ( sql ) ;
if ( rs. next ( ) ) {
} else {
// 將 URL 存儲到數據庫以避免再次解析
sql = "INSERT INTO `Crawler`.`Record` " + "(`URL`) VALUES " + "(?);" ;
PreparedStatement stmt = db。康涅狄格州 prepareStatement ( sql ,Statement.RETURN_GENERATED_KEYS );_
海峽 setString ( 1 , URL ) ;
海峽 執行( ) ;
//獲取有用信息
Document doc = Jsoup. 連接(“http://www.mit.edu/” http :// www 。麻省理工學院 教育/ ")。得到( ) ;
如果(文檔文本()。包含(“研究” )){
系統。出來。println (網址) ;
}
//獲取所有鏈接并遞歸調用processPage方法
Elements questions = doc. 選擇(“a[href]” );
for (元素鏈接:問題){
如果(鏈接。attr (“href” )。包含(“mit.edu” ))
processPage (鏈接。attr (“abs:href” ));
}
}
}
}
現在您有了自己的網絡爬蟲。當然,您需要過濾掉一些您不想抓取的鏈接。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習