专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java网络爬虫的制作方法

Java网络爬虫的制作方法

更新时间:2022-03-25 11:37:49 来源:赢咖4 浏览1075次

互联网上有很多有用的信息。我们如何才能自动获取这些信息?- 是的,Java网络爬虫。

这篇文章展示了如何使用 Java 制作一个简单的 Web 爬虫原型。制作一个网络爬虫并不像听起来那么困难。只需按照指南,您将在 1 小时或更短的时间内快速到达那里,然后享受它可以为您获取的大量信息。由于这只是一个原型,您需要花更多的时间来定制它以满足您的需求。

以下是本教程的先决条件:

基本的Java编程

一点关于 SQL 和 MySQL数据库概念

如果不想使用数据库,可以使用文件来跟踪爬取历史。

1. 目标

在本教程中,目标如下:

给定一个学校根 URL,例如“mit.edu”,返回该学校包含字符串“research”的所有页面

典型的爬虫按以下步骤工作:

解析根网页(“mit.edu”),并从该页面获取所有链接。为了访问每个 URL 并解析 HTML 页面,我将使用JSoup,它是一个用 Java 编写的方便的网页解析器。

使用从步骤 1 中检索到的 URL,并解析这些 URL

在做上述步骤的时候,我们需要跟踪之前处理过哪个页面,这样每个网页只被处理一次。这就是我们需要数据库的原因。

2.设置MySQL数据库

如果您使用的是 Ubuntu,您可以按照本指南安装 Apache、MySQL、PHP 和 phpMyAdmin。

如果您使用的是 Windows,则可以简单地使用 WampServer。您可以从 wampserver.com 简单地下载它并在一分钟内安装它,然后就可以进行下一步了。

我将使用 phpMyAdmin 来操作 MySQL 数据库。它只是一个使用 MySQL 的 GUI 界面。如果您使用任何其他工具或不使用 GUI 工具,那完全没问题。

3.创建数据库和表

创建一个名为“Crawler”的数据库并创建一个名为“Record”的表,如下所示:

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">如果不存在 `Record` (`RecordID` int(11) NOT NULL AUTO_INCREMENT, `URL` text NOT NULL, PRIMARY KEY (`RecordID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;</font></font>

4.使用Java开始爬取

(1)从 http://jsoup.org/download 下载 JSoup 核心库。

从 http://dev.mysql.com/downloads/connector/j/ 下载 mysql-connector-java-xxxbin.jar

(2)现在在您的 Eclipse 中创建一个名为“Crawler”的项目,并将您下载的 JSoup 和 mysql-connector jar 文件添加到 Java Build Path。(右键单击项目-->选择“构建路径”->“配置构建路径”->单击“库”选项卡->单击“添加外部 JAR”)

(3)创建一个名为“DB”的类,用于处理数据库操作。

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)创建一个名为“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"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/"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"));
			}
		}
	}
}

现在您有了自己的Java网络爬虫。当然,您需要过滤掉一些您不想抓取的链接。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>