如何使用Java制作网络爬虫? javaweb爬虫

createh515小时前技术教程9

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

这篇文章展示了如何使用Java制作简单的Web爬网程序原型。制作Web搜寻器并不像听起来那样困难。只需按照指南进行操作,您将在1小时或更短的时间内迅速到达该地点,然后享受它可以为您提供的大量信息。由于这只是一个原型,因此您需要花费更多时间来根据需要自定义它。

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

· 基本Java程式设计

· 关于SQL和MySQL数据库的一些知识。

如果您不想使用数据库,则可以使用文件来跟踪爬网历史记录。

1.目标


在本教程中,目标如下:

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

典型的搜寻器按以下步骤工作:

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

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

3. 执行上述步骤时,我们需要跟踪之前已处理过的页面,因此每个网页仅被处理一次。这就是我们需要数据库的原因。

2.设置MySQL数据库

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

如果使用Windows,则只需使用WampServer。您可以简单地从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)下载JSoup核心库。

2)现在,在Jsoup中创建一个名为" 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");
	}
?
	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"));
			}
		}
	}}


最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

相关文章

深入浅出SQL Server中的死锁 sqlserver数据库死锁产生的原因及解决方案

简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的。理解死锁首先需要对死锁所涉及的相关观念有一个理解。一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理解...

C# VS JAVA 哪一个更容易学? c#与java谁更好

在写关于C# 与JAVA的区别时,知道本话题 会带来些争议,但还是本着为入门的程序人员提供一些参考。这是 一个系列专题 ,在写之前我稍有一点序言要说我们将C#与JAVA进行比较时,也需要在运行平台上进...

ShardingSphere-Proxy分库分表以及多租户安装使用

需求:你提供SAAS服务,你有你有2个租户(商户),各自的数据进各自的库,而你不希望你的微服务java里默认配置多个租户数据源,数据连接池太多,而且后面动态增加也不方便,诸如此类很多问题。方案:Sha...

SSM框架实现的健身房管理系统(B/S架构+源码+数据库+毕业论文)

一、项目简介本项目是一套基于SSM框架实现的健身房管理系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea 确保可以运行!该系统功能完善、...

学生成绩管理系统的设计与实现 学生成绩管理系统设计方案

本学生成绩管理系统采用B/S模式架构设计,使用的技术包括:Java编程语言、JSP技术、SpringMVC框架和MySQL数据库,主要实现了学生端系统、教师端和后台管理系统三个端,本系统主要分为学生端...

Java vs C#: 分析两门语言的特点与应用领域

当面对Java和C#这两种编程语言时,很容易让人感到纠结。这两种语言都是世界使用人数排名前五的语言,因此,我们需要分析它们的特点和应用领域。语法方面,如果您接触过Java和C#,您会发现两种语言的语法...