ホームページ  >  記事  >  Java  >  Java クローラー アプリケーションのチュートリアル、実践的なデータのキャプチャと分析

Java クローラー アプリケーションのチュートリアル、実践的なデータのキャプチャと分析

WBOY
WBOYオリジナル
2023-06-15 23:22:471575ブラウズ

Java クローラー アプリケーションのチュートリアル、実践的なデータのキャプチャと分析

インターネット時代の到来により、企業や個人が成功する唯一の方法はデータとなり、データの重要性がますます高まっています。重要です。もっと高くなってください。データ収集のための強力なツールとして、クローラー テクノロジーはあらゆる分野で広く使用されています。この記事では、Java 言語を使用してデータをキャプチャおよび分析するクローラーを作成する方法を紹介します。

1. 前提知識

Java クローラーを学習する前に、次の基礎知識を習得する必要があります:

  1. Java 言語の基礎: 少なくとも理解する必要があります。 Java クラス、メソッド、変数、オブジェクト指向プログラミングの考え方などの基本的な概念。
  2. HTML の基本: HTML 言語の基本構造とタグを理解すると、単純な CSS スタイルと JavaScript コードを使用できます。
  3. HTTP の基本: HTTP プロトコルの GET メソッドと POST メソッドの基本原則を理解し、Cookie、ユーザー エージェントなどの HTTP ヘッダー情報をある程度理解します。
  4. 正規表現: 正規表現の基本的な構文と使用法を理解します。
  5. データベース操作: JDBC、Hibernate、MyBatis などの Java データベース操作の基本知識をマスターします。

2. Java クローラーの基本

Web クローラーは、インターネットにアクセスし、Web ページから情報を抽出して処理する人間の動作をシミュレートできる自動プログラムです。 Java 言語は優れたネットワーク プログラミング機能と強力なオブジェクト指向機能を備えているため、クローラー プログラムの作成に非常に適しています。

Java クローラーは通常、URL マネージャー、Web ページ ダウンローダー、Web ページ パーサーの 3 つの部分に分かれています。

  1. URL マネージャー

URL マネージャーは、クローラーがクロールする必要がある URL アドレスを管理し、どの URL がクロールされたか、どの URL がまだクロールされる必要があるかを記録します。通常、URL マネージャーを実装するには 2 つの方法があります。

(1) インメモリ URL マネージャー: セットまたはキューを使用して、クロールされた URL とクロールされる URL を記録します。

(2) データベース URL マネージャー: クロールされた URL とクロールされる URL をデータベースに保存します。

  1. Web ページ ダウンローダー

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();
    }
}
  1. Webpage parser

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 サイトからデータを取得して分析するための簡単なクローラー プログラムを作成してみます。

  1. データのクロール

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 クラスを使用して映画情報を保存します。

  1. データの保存

取得した動画データは、その後の解析を容易にするためにデータベースに保存します。ここでは 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();
        }
    }
}
  1. データの分析

データを取得したら、それを分析します。ここでカウントします。各監督の出演作品数と平均評価。コードは以下の通りです:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。