更新時(shí)間:2020-06-22 11:59:49 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2750次
如何使用Java制作簡(jiǎn)單的Web爬網(wǎng)程序原型。制作Web搜尋器并不像聽起來那樣困難。只需按照指南進(jìn)行操作,您將在1小時(shí)或更短的時(shí)間內(nèi)迅速到達(dá)該地點(diǎn),然后享受它可以為您提供的大量信息。由于這只是一個(gè)原型,因此您需要花費(fèi)更多時(shí)間來根據(jù)需要自定義它。
以下是本教程的先決條件:
·基本Java程式設(shè)計(jì)
·關(guān)于SQL和MySQL數(shù)據(jù)庫(kù)的一些知識(shí)。
如果您不想使用數(shù)據(jù)庫(kù),則可以使用文件來跟蹤爬網(wǎng)歷史記錄。
1.目標(biāo)
在本教程中,目標(biāo)如下:
給定學(xué)校根URL,例如"mit.edu",返回包含該學(xué)校字符串"research"的所有頁(yè)面
典型的搜尋器按以下步驟工作:
1.解析根網(wǎng)頁(yè)("mit.edu"),并從該頁(yè)面獲取所有鏈接。要訪問每個(gè)URL并解析HTML頁(yè)面,我將使用JSoup,它是用Java編寫的便捷的網(wǎng)頁(yè)解析器。
2.使用從步驟1檢索到的URL,并解析這些URL
3.執(zhí)行上述步驟時(shí),我們需要跟蹤之前已處理過的頁(yè)面,因此每個(gè)網(wǎng)頁(yè)僅被處理一次。這就是我們需要數(shù)據(jù)庫(kù)的原因。
2.設(shè)置MySQL數(shù)據(jù)庫(kù)
如果您使用的是Ubuntu,則可以按照本指南安裝Apache,MySQL,PHP和phpMyAdmin。
如果使用Windows,則只需使用WampServer。您可以簡(jiǎn)單地從wampserver.com下載它,并在一分鐘內(nèi)安裝它,可以繼續(xù)進(jìn)行下一步。
我將使用phpMyAdmin來操作MySQL數(shù)據(jù)庫(kù)。它只是使用MySQL的GUI界面。如果您使用任何其他工具或不使用GUI工具,那都很好。
3.創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和一個(gè)表
創(chuàng)建一個(gè)名為"Crawler"的數(shù)據(jù)庫(kù),并創(chuàng)建一個(gè)名為"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;
4.開始使用Java進(jìn)行爬網(wǎng)
1)下載JSoup核心庫(kù)。
2)現(xiàn)在,在Jsoup中創(chuàng)建一個(gè)名為"Crawler"的項(xiàng)目,并將您下載的JSoup和mysql-connector jar文件添加到Java Build Path。(右鍵單擊項(xiàng)目->選擇"構(gòu)建路徑"->"配置構(gòu)建路徑"->單擊"庫(kù)"選項(xiàng)卡->單擊"添加外部JAR")
3)創(chuàng)建一個(gè)名為"DB"的類,該類用于處理數(shù)據(jù)庫(kù)操作。
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;
public class DB{
public Connection conn=null;
public DB(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/Crawler";
conn=DriverManager.getConnection(url,"root","admin213");
System.out.println("conn built");
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public ResultSet runSql(String sql)throws SQLException{
Statement sta=conn.createStatement();
return sta.executeQuery(sql);
}
public boolean runSql2(String sql)throws SQLException{
Statement sta=conn.createStatement();
return sta.execute(sql);
}
Override
protected void finalize()throws Throwable{
if(conn!=null||!conn.isClosed()){
conn.close();
}
}}
4)創(chuàng)建一個(gè)名稱為"Main"的類,它將作為我們的搜尋器。
import java.io.IOException;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;
public class Main{
public static DB db=new DB();
public static void main(String[]args)throws SQLException,IOException{
db.runSql2("TRUNCATE Record;");
processPage("http://www.mit.edu");
}
public static void processPage(String URL)throws SQLException,IOException{
//check if the given URL is already in database
String sql="select*from Record where URL='"+URL+"'";
ResultSet rs=db.runSql(sql);
if(rs.next()){
}else{
//store the URL to database to avoid parsing again
sql="INSERT INTO`Crawler`.`Record`"+"(`URL`)VALUES"+"(?);";
PreparedStatement stmt=db.conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
stmt.setString(1,URL);
stmt.execute();
//get useful information
Document doc=Jsoup.connect("http://www.mit.edu/").get();
if(doc.text().contains("research")){
System.out.println(URL);
}
//get all links and recursively call the processPage method
Elements questions=doc.select("a[href]");
for(Element link:questions){
if(link.attr("href").contains("mit.edu"))
processPage(link.attr("abs:href"));
}
}
}}
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“java爬蟲技術(shù)之如何使用Java制作網(wǎng)絡(luò)爬蟲?”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743