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 :
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.
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.
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(); } }
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.
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.
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(); } } }
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!