首页 课程 师资 教程 报名

教你使用Java制作网页爬虫

  • 2022-10-12 11:19:10
  • 1519次 动力节点

这篇文章展示了如何使用 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 简单地下载它并在一分钟内安装它,然后就可以进行下一步了。wampserver 。com并在一分钟内安装它,很好地进行下一步。

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

3.创建数据库和表

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

4.使用Java开始爬取

(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” ));
			} 
		} 
	} 
}

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

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交