Java の基本: クローラー

1. ローカル クローラー

パターン:正規表現を表します

マッチャー:正規表現のルールに従って文字列を先頭から読み取るテキスト マッチャー。大きな文字列内で一致ルールに一致する部分文字列を検索します。

1.2. パターンオブジェクトの取得

パターンによって取得p = Pattern.compile("正規表現");

1.3. Matcher オブジェクトの取得

Matcherによって取得m = p.matcher(str); (m は str 内の p ルールを満たす小さな文字列を見つける必要があります)

このうち、m は Matcher オブジェクト、p は正規表現ルール、str は検証対象の文字列です。

1.4. テキスト内のオブジェクトの一致

boolean b = m.find();テキスト マッチャーで最初から読み取って、ルールを満たす部分文字列があるかどうかを確認することを示します。ルールを満たす部分文字列が存在しない場合、メソッドは false を返します。存在する場合、メソッドは true を返します。最下層の部分文字列の開始インデックスと終了インデックス + 1 を記録します。

1.5. テキストマッチャーのインデックスをインターセプトする

String s = m.group(); この時点で、テキスト マッチャーは最初に一致したテキストの末尾インデックス +1 に留まり、インデックス (0,4) にテキスト内のインデックス 4 が含まれない文字列を返します。 (の規定に準拠)。 

1.6. マッチングを続けてインデックスを取得する

手順 4 と 5 を繰り返し、前回中断したところから逆方向に検索します。

ステップ 4 と 5 は通常、while(m.find()){} ループを通じて実装されます。

String s = "电话12345678901, 邮箱[email protected]";
        // 写正则表达式
        String regex = "([1]\\d{10}|\\w{1,}@[\\w&&[^-]]{2,}([.][c][omn]{1,3})+)";
        // 生成正则对象
        Pattern pattern = Pattern.compile(regex);
        // 生成匹配器对象
        Matcher matcher = pattern.matcher(s);
        // 用循环去读取匹配的内容
        while (matcher.find()) {
            // 获取匹配的字符串
            String group = matcher.group();
            System.out.println(group);
        }

2. Web クローラー

 // 创建一个URL对象
        URL url = new URL("https://blog.csdn.net/Orange_sparkle?type=lately");
        // 连接网址
        URLConnection conn = url.openConnection();
//        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        // 创建对象读取数据
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//        conn.setRequestProperty("User-Agent", "Mozilla/4.76");
        String information;
        // 获取正则表达式对象pattern
//        String regex = "";
//        Pattern pattern = Pattern.compile(regex);
        // 在读取的时候每次读一行
        while ((information = bufferedReader.readLine()) != null) {
            System.out.println(information);
//            Matcher matcher = pattern.matcher(information);
//            while (matcher.find()){
//                System.out.println(matcher.group());
//            }
        }bufferedReader.close();

3. 条件付きでデータをクロールする

? は前のデータを表し、次の記号と正規表現は後続のデータを意味します。

シンボルを確認しない場合は、文字列 Java(8|11|17) と一致する必要があります。シンボルは次のとおりです。 

= は、等号の前のデータのみを取得し、その後のデータを無視することを意味します。

:コロンの前後両方を取得することを示します。

! 感嘆符の後のデータを取得することを示します

正規表現の設定が異なる以外は、以降の手順は同じです。

4. 貪欲なクローリングと非貪欲なクローリング

貪欲なクロール: データをクロールするときにできるだけ多くのデータを取得します (例: abbbbbbbbbbbb)

貪欲でないクロール: データをクロールするときに取得するデータはできるだけ少なくします (例: ab)

Java では、デフォルトは貪欲なクロールです。

数量詞 +* の後に疑問符を追加すると、これは貪欲でないクロールになります。

5. 文字列での正規表現の使用

 まず正規表現ルールを作成し、それを文字列メソッドに渡し、新しく置換された文字列または切り取られた文字列配列を返します。

6. グループ化

赤が最初のグループ、青が2番目のグループ、緑が3番目のグループです

6.1. パケットのキャプチャ

\\グループ番号は、グループの一致したコンテンツを再度一致させることを意味し、2 つの部分のコンテンツは同じです。

このデータ グループを外部で使用するには、$group 番号が必要です。

6.2 非キャプチャパケット

特徴: グループ番号を占有しない

7. まとめ

おすすめ

転載: blog.csdn.net/Orange_sparkle/article/details/129263808