2

このコードを使用して、Google を使用して単語のリストに対してクエリを実行し、Google から多数の検索結果を抽出しています。それはうまくいきましたが、昨夜以来、200回のクエリを実行した後もこのエラーが発生し続けます(Googleが私にフラグを立てたと思います!):スレッド「メイン」での例外java.io.IOException:サーバーがHTTP応答コードを返しました:URLの503:http ://www.google.com/sorry/?continue=http://www.google.com/ ...

「赤」はほんの一例です。

public class Google {
public static void main(String[] args) throws IOException {
        String query = "red";
        String urlName = "http://www.google.com/search?q=\""+query+"\"";
        URL url = new URL(urlName);
        URLConnection conn = url.openConnection();
        conn.setRequestProperty("User-Agent",
                "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1.6) Gecko/20070723 Iceweasel/2.0.0.6 (Debian-2.0.0.6-0etch1)");
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        Pattern pattern = Pattern.compile("<div>About (.*?) results</div>"); //<div>About 1,620,000 results</div>
        String line;
        while ((line = in.readLine()) != null) {
            Matcher m = pattern.matcher(line);
            if (m.find()) {
                System.out.println(m.group(1)); // m.group(1) coresponds to results number: i.e.: 1,620,000
            }
        }
        in.close();
    }

}

解決策、提案はありますか?

4

2 に答える 2

5

おそらくクエリの頻度が原因で、ボットとしてフラグが付けられました。これを別の IP から実行してみてください (その IP がボットとしてフラグ付けされる前に)。

とにかく、おそらく Google 検索 API を使用する必要があります。サイト https://developers.google.com/custom-search/v1/overviewから:

価格

無料割り当て

1 日あたり最大 100 クエリまで、すべてのユーザーが無料で使用できます。

有料使用

課金にサインアップしていない場合、無料の使用量割り当てを超えた使用は失敗します。課金を有効にすると、引き続き 1 日あたり 100 件の無料クエリを受け取ることができます。ただし、追加のすべてのリクエストに対しては、1 日あたり最大 10,000 クエリまで、1,000 クエリあたり 5 ドルの料金が請求されます。追加のクォータが必要な場合は、コンソールから追加のクォータをリクエストしてください。

于 2012-04-04T21:03:59.393 に答える
0

具体的にはエラーページから:

「私たちのシステムは、あなたのコンピュータ ネットワークから異常なトラフィックを検出しました。このページは、リクエストを送信したのが本当にあなたであり、ロボットではないかどうかを確認します。」

あなたは明らかに彼らのページにアクセスするロボットであるため、トラフィックを回避するために彼らは特定の手段を講じています.

とは言っても、ある時点で Google で身元を確認する必要があります。このページで推奨されている方法は、作成者 (自分自身) に画像を提示し、手動でキャプチャをバイパスしてから、プログラムで使用するために Cookie を保存することです。

于 2012-04-04T21:02:18.617 に答える