Categorías
Java Projects

¿Cómo hacer un rastreador web usando Java?

Hay mucha información útil en Internet. ¿Cómo podemos obtener esa información automáticamente? – Sí, Web Crawler.

Esta publicación muestra cómo hacer un prototipo de rastreador web simple usando Java. Hacer un rastreador web no es tan difícil como parece. Simplemente siga la guía y llegará rápidamente en 1 hora o menos, y luego disfrute de la gran cantidad de información que puede obtener para usted. Como este es solo un prototipo, necesita dedicar más tiempo a personalizarlo según sus necesidades.

Los siguientes son requisitos previos para este tutorial:

  • Programación básica de Java
  • Un poco sobre SQL y MySQL Database.

Si no desea utilizar una base de datos, puede utilizar un archivo para realizar un seguimiento del historial de rastreo.

1. El objetivo

En este tutorial, el objetivo es el siguiente:

Dada la URL raíz de una escuela, por ejemplo, «mit.edu», devuelve todas las páginas que contienen una cadena «investigación» de esta escuela.

Un rastreador típico funciona en los siguientes pasos:

  1. Analice la página web raíz («mit.edu») y obtenga todos los enlaces de esta página. Para acceder a cada URL y analizar la página HTML, usaré JSoup que es un conveniente analizador de páginas web escrito en Java.
  2. Usar las URL que se recuperaron del paso 1 y analizar esas URL
  3. Al realizar los pasos anteriores, debemos rastrear qué página se ha procesado antes, de modo que cada página web solo se procese una vez. Ésta es la razón por la que necesitamos una base de datos.

2. Configurar la base de datos MySQL

Si está utilizando Ubuntu, puede seguir esta guía para instalar Apache, MySQL, PHP y phpMyAdmin.

Si está usando Windows, simplemente puede usar WampServer. Puede descargarlo de wampserver.com e instalarlo en un minuto y listo para el siguiente paso.

  ¿Cómo escribir un rastreador usando Java?

Usaré phpMyAdmin para manipular la base de datos MySQL. Es simplemente una interfaz GUI para usar MySQL. Está totalmente bien si tiene otras herramientas o no usa herramientas de GUI.

3. Crea una base de datos y una tabla.

Cree una base de datos llamada «Rastreador» y cree una tabla llamada «Registro» como la siguiente:

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. Empiece a rastrear con Java

1). Descargue la biblioteca principal de JSoup desde http://jsoup.org/download.
Descargue mysql-connector-java-xxxbin.jar desde http://dev.mysql.com/downloads/connector/j/

2). Ahora cree un proyecto en su eclipse con el nombre «Crawler» y agregue los archivos jar JSoup y mysql-connector que descargó en Java Build Path. (haga clic con el botón derecho en el proyecto -> seleccione «Ruta de compilación» -> «Configurar ruta de compilación» -> haga clic en la pestaña «Bibliotecas» -> haga clic en «Agregar archivos JAR externos»)

3). Cree una clase llamada «DB» que se utiliza para manejar las acciones de la base de datos.

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();
		}
	}
}
  ¿Cómo escribir un rastreador usando Java?

4). Cree una clase con el nombre «Main» que será nuestro rastreador.

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"));
			}
		}
	}
}
  ¿Cómo escribir un rastreador usando Java?

Ahora tiene su propio rastreador web. Por supuesto, deberá filtrar algunos enlaces que no desea rastrear.

El resultado es el siguiente cuando ejecuté el código el 26 de mayo de 2014.

web-crawler-java-result

Enlaces:
Descarga del código fuente de Java Crawler
Rastreador de Java en GitHub

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *