Java jsoup中的爬虫程序(需要优化)
我在jSoup的帮助下用Java制作了一个爬虫程序,我需要优化或建议来使我的爬虫程序更好、无错误。请帮助我理解最后for中的for each循环(元素链接:问题)这个循环实际上做什么?它获取同一页面的所有链接,然后爬网,或者只是找到第一个链接,然后爬网到该链接 提前谢谢Java jsoup中的爬虫程序(需要优化),java,html,jsoup,web-crawler,Java,Html,Jsoup,Web Crawler,我在jSoup的帮助下用Java制作了一个爬虫程序,我需要优化或建议来使我的爬虫程序更好、无错误。请帮助我理解最后for中的for each循环(元素链接:问题)这个循环实际上做什么?它获取同一页面的所有链接,然后爬网,或者只是找到第一个链接,然后爬网到该链接 提前谢谢 public class crawler_html { public static db_Connection db = new db_Connection(); public crawler_html(String
public class crawler_html {
public static db_Connection db = new db_Connection();
public crawler_html(String url) throws SQLException, IOException
{ //db.runSql2("TRUNCATE Record;");
processPage(url);
}
public static void processPage(String url) throws SQLException, IOException{
//check if the given URL is already in database
String sql = "select * from crawler where URL ='"+url+"'";
ResultSet rs = db.runSql(sql);
if(rs.next()){
System.out.println("URL Found");
//If url found what to do next
}else{
System.out.println("Store the URL to database");
//store the URL to database to avoid parsing again
sql = "INSERT INTO crawler (URL) VALUES ('"+url+"')";
PreparedStatement stmt = db.conn.prepareStatement(sql);
if(stmt!=null){
stmt.execute();
System.out.println("Executed well");
}
//get useful information
// timeout(0) sets the time to infinite
Document doc = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36")
.timeout(0)
.ignoreHttpErrors(true)
.followRedirects(true)
.execute()
.parse();
//get all links and recursively call the processPage method
Elements questions = doc.select("a[href]");
for(Element link: questions){
{
db.stmtclose();
processPage(link.attr("abs:href"));
}
}
}
}
}
}
}
首先,我不认为需要递归调用。这只会使你的代码更复杂 您可以有两种方法,一种方法用于检查数据库中是否存在URL,并基于此检查插入或继续的逻辑 从页面获取数据的另一种方法 所以我会这样写:
public class htmlCrawler{
public static db_Connection db = new db_Connection();
public htmlCrawler(String url){
getLinksFromPage(url);
}
public boolean checkInDb(String url){
//your data base logic here
}
public boolean getLinksFromPage(String url){
//your jsoup thing
//the loop
Elements questions = doc.select("a[href]").getAll();
for(Element link: questions){
{
String link = link.attr("abs:href");
checkInDb(link);
}
}
}
如果您需要更多帮助,请告诉我。嘿,谢谢Nischal的帮助,它非常有用,请告诉我我必须添加到这个爬虫程序中的一些内容,以使其更完善。当你第一次写东西时,请帮我处理可能发生的异常,使用IDE例如ECLIPSE,它将帮助你处理异常。除非确定需要,否则避免递归。如果你认为我之前的回答对你有帮助,请将其标记为答案。