Java クローラー アプリケーションのチュートリアル、実践的なデータのキャプチャと分析
インターネット時代の到来により、企業や個人が成功する唯一の方法はデータとなり、データの重要性がますます高まっています。重要です。もっと高くなってください。データ収集のための強力なツールとして、クローラー テクノロジーはあらゆる分野で広く使用されています。この記事では、Java 言語を使用してデータをキャプチャおよび分析するクローラーを作成する方法を紹介します。
1. 前提知識
Java クローラーを学習する前に、次の基礎知識を習得する必要があります:
2. Java クローラーの基本
Web クローラーは、インターネットにアクセスし、Web ページから情報を抽出して処理する人間の動作をシミュレートできる自動プログラムです。 Java 言語は優れたネットワーク プログラミング機能と強力なオブジェクト指向機能を備えているため、クローラー プログラムの作成に非常に適しています。
Java クローラーは通常、URL マネージャー、Web ページ ダウンローダー、Web ページ パーサーの 3 つの部分に分かれています。
URL マネージャーは、クローラーがクロールする必要がある URL アドレスを管理し、どの URL がクロールされたか、どの URL がまだクロールされる必要があるかを記録します。通常、URL マネージャーを実装するには 2 つの方法があります。
(1) インメモリ URL マネージャー: セットまたはキューを使用して、クロールされた URL とクロールされる URL を記録します。
(2) データベース URL マネージャー: クロールされた URL とクロールされる URL をデータベースに保存します。
Web ページ ダウンローダーはクローラーの中核部分であり、インターネットから Web ページをダウンロードする役割を果たします。 Java クローラーには通常 2 つの実装メソッドがあります:
(1) URLConnection: URLConnection クラスを使用して実装され、比較的使用が簡単です。コア コードは次のとおりです:
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 : HttpClient フレームワークを使用して実装され、URLConnection よりも強力で、Cookie やカスタム ユーザー エージェントなどの HTTP ヘッダー情報を処理できます。コア コードは次のとおりです:
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(); } }
Web ページのダウンロード ダウンロード後、Web ページ パーサーを使用してデータを抽出する必要があります。 Java クローラーには通常 2 つの実装方法があります:
(1) 正規表現: 正規表現を使用して Web ページ内のデータと一致します。コア コードは次のとおりです:
String pattern = "<title>(.*?)</title>"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(html); if (m.find()) { System.out.println(m.group(1)); }
(2) HTML パーサー: Jsoup フレームワークを使用して実装すると、Web ページを DOM 構造に変換し、CSS セレクターまたは XPath に似たメソッドを通じてデータを取得できます。コア コードは次のとおりです:
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 . Java クローラーの実践
理解 Java クローラーの基本的な考え方と実装方法を理解した後、Web サイトからデータを取得して分析するための簡単なクローラー プログラムを作成してみます。
Douban 映画ランキングのデータをクロールすることにしました。まず、以下に示すように、Douban 映画ランキングの URL アドレスを取得する必要があります。
https://movie.douban.com/chart
次に、Jsoup フレームワークを使用して Web ページをダウンロードし、その中のデータを抽出します。コードは次のとおりです。以下:
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); }
ここでは、Movie クラスを使用して映画情報を保存します。
取得した動画データは、その後の解析を容易にするためにデータベースに保存します。ここでは JDBC を使用してデータベースを操作します。コードは次のとおりです:
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(); } } }
データを取得したら、それを分析します。ここでカウントします。各監督の出演作品数と平均評価。コードは以下の通りです:
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(); } } }
取得した動画情報をデータベースに保存し、解析する Java クローラーの実用化が完了しました。
4. 概要
この記事では、読者がクローラ テクノロジと Java プログラミングをよりよく理解できるように、Java クローラの基本的な知識と実践的なアプリケーションを紹介します。実際には、法的および倫理的規範に注意を払い、他人のプライバシーを違法に取得したり、著作権を侵害したりしないようにする必要があります。同時に、クロールされた Web サイトによってブロックされたり IP が禁止されたりしないように、クローラー対策テクノロジーを習得する必要もあります。
以上がJava クローラー アプリケーションのチュートリアル、実践的なデータのキャプチャと分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。