Maison  >  Article  >  Java  >  Tutoriel d'application Java Crawler, capture et analyse pratiques de données

Tutoriel d'application Java Crawler, capture et analyse pratiques de données

WBOY
WBOYoriginal
2023-06-15 23:22:471522parcourir

Tutoriel d'application Java Crawler, capture et analyse pratiques de données

Avec l'avènement de l'ère Internet, les données sont devenues le seul moyen pour les entreprises et les particuliers de réussir, leur importance augmente donc également. En tant qu’outil puissant d’acquisition de données, la technologie des robots d’exploration a été largement utilisée dans tous les domaines. Cet article explique comment utiliser le langage Java pour écrire un robot permettant de capturer et d'analyser des données.

1. Connaissances préalables

Avant d'apprendre le robot d'exploration Java, vous devez maîtriser les connaissances de base suivantes :

  1. Bases du langage Java : vous devez au moins comprendre les concepts de base tels que les classes, les méthodes, les variables, etc. ainsi que la pensée de programmation orientée objet.
  2. Bases du HTML : comprenez la structure de base et les balises du langage HTML et pouvez utiliser des styles CSS simples et des codes JavaScript.
  3. Bases de HTTP : Comprendre les principes de base des méthodes GET et POST dans le protocole HTTP et avoir une certaine compréhension des informations d'en-tête HTTP telles que Cookie, User-Agent, etc.
  4. Expressions régulières : comprenez la syntaxe de base et l'utilisation des expressions régulières.
  5. Opérations de base de données : Maîtrisez les connaissances de base des opérations de base de données Java, telles que JDBC, Hibernate, MyBatis, etc.

2. Notions de base du robot d'exploration Java

Un robot d'exploration Web est un programme automatisé qui peut simuler le comportement humain pour accéder à Internet, extraire des informations des pages Web et les traiter. Le langage Java possède de bonnes capacités de programmation réseau et de puissantes fonctionnalités orientées objet, il est donc très approprié pour écrire des programmes d'exploration.

Les robots d'exploration Java sont généralement divisés en trois parties : le gestionnaire d'URL, le téléchargeur de pages Web et l'analyseur de pages Web.

  1. URL Manager

URL Manager gère les adresses URL que les robots doivent explorer et enregistre quelles URL ont été explorées et quelles URL doivent encore être explorées. Il existe généralement deux manières de mettre en œuvre des gestionnaires d'URL :

(1) Gestionnaire d'URL en mémoire : utilisez un ensemble ou une file d'attente pour enregistrer les URL qui ont été explorées et les URL à explorer.

(2) Gestionnaire d'URL basé sur une base de données : stockez les URL explorées et à explorer dans la base de données.

  1. Webpage Downloader

Webpage Downloader est la partie centrale du robot d'exploration et est responsable du téléchargement des pages Web à partir d'Internet. Les robots Java ont généralement deux méthodes d'implémentation :

(1) URLConnection : implémenté à l'aide de la classe URLConnection, qui est relativement simple à utiliser. Le code de base est le suivant :

URL url = new URL("http://www.example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = reader.readLine();
while (line != null) {
    System.out.println(line);
    line = reader.readLine();
}

(2) HttpClient : implémenté à l'aide du framework HttpClient, qui. est plus puissant que URLConnection et peut traiter les informations d'en-tête HTTP telles que les cookies et l'agent utilisateur personnalisé, le code principal est le suivant :

HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod("http://www.example.com");
int status = httpClient.executeMethod(getMethod);
if (status == HttpStatus.SC_OK) {
    InputStream in = getMethod.getResponseBodyAsStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = reader.readLine();
    while (line != null) {
        System.out.println(line);
        line = reader.readLine();
    }
}
  1. Analyseur de page Web

Une fois la page Web téléchargée, vous devez utiliser un analyseur de page Web pour extraire les données. Les robots d'exploration Java ont généralement deux méthodes d'implémentation :

(1) Expression régulière : utilisez des expressions régulières pour faire correspondre les données dans les pages Web. Le code de base est le suivant :

String pattern = "<title>(.*?)</title>";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(html);
if (m.find()) {
    System.out.println(m.group(1));
}

(2) Analyseur HTML : implémenté à l'aide du framework Jsoup, le Web. La page peut être convertie en une structure DOM, puis obtenir des données via des sélecteurs CSS ou des méthodes similaires à XPath. Le code de base est le suivant :

Document doc = Jsoup.connect("http://www.example.com").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
    String text = link.text();
    String href = link.attr("href");
    System.out.println(text + " " + href);
}

3. Pratique du robot d'exploration Java

Après avoir compris les idées de base et les méthodes d'implémentation des robots d'exploration Java. , nous pouvons essayer d’écrire un programme d’exploration simple pour obtenir les données d’un site Web et les analyser.

  1. Exploration des données

Nous avons choisi d'explorer les données du classement des films Douban. Tout d'abord, nous devons obtenir l'adresse URL du classement des films Douban, comme indiqué ci-dessous :

https://movie.douban.com/chart

Ensuite, nous pouvons utiliser le framework Jsoup pour télécharger la page Web et en extraire les données, le code est le suivant :

Document doc = Jsoup.connect("https://movie.douban.com/chart").get();
Elements items = doc.select("div.item");
List<Movie> movieList = new ArrayList<>();
for (Element item : items) {
    Elements title = item.select("div.info div.hd a");
    Elements rating = item.select("div.info div.bd div.star span.rating_num");
    Elements director = item.select("div.info div.bd p").eq(0);
    Elements actor = item.select("div.info div.bd p").eq(1);
    Movie movie = new Movie();
    movie.setTitle(title.text());
    movie.setRating(Double.valueOf(rating.text()));
    movie.setDirector(director.text().replace("导演: ", ""));
    movie.setActor(actor.text().replace("主演: ", ""));
    movieList.add(movie);
}

Ici, nous utilisons une classe Movie pour stocker les informations sur le film.

  1. Données de stockage

Stockez les données de film obtenues dans la base de données pour faciliter l'analyse ultérieure. Ici nous utilisons JDBC pour faire fonctionner la base de données, le code est le suivant :

public class DBHelper {
    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/db";
    private static final String USER = "root";
    private static final String PASS = "password";

    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void saveMovies(List<Movie> movieList) {
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(
                     "INSERT INTO movie(title,rating,director,actor) VALUES (?,?,?,?)"
             )) {
            for (Movie movie : movieList) {
                stmt.setString(1, movie.getTitle());
                stmt.setDouble(2, movie.getRating());
                stmt.setString(3, movie.getDirector());
                stmt.setString(4, movie.getActor());
                stmt.addBatch();
            }
            stmt.executeBatch();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. Analyser les données

Après avoir les données, nous pouvons les analyser Ici nous comptons le nombre de films et les notes moyennes de chaque réalisateur. Le code est le suivant :

public class MovieAnalyzer {
    public static void analyzeMovies() {
        try (Connection conn = DBHelper.getConnection();
             Statement stmt = conn.createStatement()) {
            String sql = "SELECT director, COUNT(*) AS cnt, AVG(rating) AS avg_rating " +
                    "FROM movie " +
                    "GROUP BY director " +
                    "HAVING cnt > 1 " +
                    "ORDER BY avg_rating DESC";
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                String director = rs.getString("director");
                int cnt = rs.getInt("cnt");
                double avgRating = rs.getDouble("avg_rating");
                System.out.printf("%-20s %5d %7.2f%n", director, cnt, avgRating);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Stockez les informations sur le film obtenues dans la base de données et analysez-les. Nous avons terminé l'application pratique du robot d'exploration Java.

4. Résumé

Cet article présente les connaissances de base et les applications pratiques des robots d'exploration Java, dans l'espoir d'aider les lecteurs à mieux comprendre la technologie des robots d'exploration et la programmation Java. Dans la pratique, vous devez prêter attention aux normes juridiques et éthiques et vous abstenir d'obtenir illégalement la vie privée d'autrui et de violer les droits d'auteur. Dans le même temps, vous devez également maîtriser la technologie anti-crawler pour éviter d'être bloqué ou d'être banni par les sites Web explorés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn