1

事は:私はウェブクローラーフレームワークと、このフレームワークを実装する独立したモジュールを持っています。これらのモジュールはすべて、ニュース固有のWebサイトからのニュースをキャプチャします。

フレームワークには、IOExceptionとSocketTimeoutExceptionの2つの予測できないエラーがあります。明らかな理由で(Webサイトがオフラインであるか、メンテナンス中の可能性があります)

特定のWebサイト(これ)では、常にランダムなIOExceptionが発生します。予測してみましたが、なぜこのエラーが発生するのかわかりません。

私はそれがテスト段階の間に要求でそれを爆撃したことからだと思いました。別の要求を送信せずに2、3日経ってもエラーが発生するため、そうではありません。

一言で言えば:サイトは認証を必要とせず、ランダムに403をスローします。ランダムに

403は複数の異なるエラーになる可能性があるため、アプリケーションの特定の問題を確認したいと思います。

403 it iを取得できれば、回避することができます。(403.1、403.2、...、403.n)

//If you guys want the code, it's a basic Jsoup get. 
//(I have also tried it with native API, 
//and still get the same random 403 errors)

//Note that I also tried it with no redirection, and still get the error
Document doc = Jsoup
    .connect("http://www.agoramt.com.br/")
    .timeout(60000)
    .followRedirects(true)
    .get();

//You may criticize about the code. But this specific line is the one 
//that throws the error. And it doesn't randomly do that to other 3k
//site connections. That's why I want to get the specifics from the 403
4

7 に答える 7

3

サーバーは気まぐれで403を返す場合があります。サーバーがあなたを入れないという希望を尊重する場合を除いて、これを解決することは期待されていません。サーバーから提供された詳細については応答本文を読んでみてください。あなたが探している403.nエラーコードはIIS固有の機能であり、あなたが指摘したサイトはnginxで提供されているようですので、それらを取得することを期待しないでください。

Webクローラーがランダムに403を取得するが、(同じIPからの)通常のWebブラウザーが403を取得しない場合、私が提案できる最善の方法は、Webクローラーの要求ヘッダーを通常のWebブラウザーが送信するものとまったく同じように見せることです。それが礼儀正しいウェブクローラーにとって適切な振る舞いであるかどうかは別の議論です。

于 2012-06-18T12:28:15.247 に答える
1

Webクローラーの設計では、予期しない停止とエラーコードを考慮する必要があります。

前回障害が発生したサイトのキューを保持して、一定期間後にWebクローラーが要求を再試行できるようにします。

于 2012-06-23T20:41:44.053 に答える
0

問題は、アクセスできるフォルダがあり、プログラムがサイト上のすべてのファイルを読み取りたいのに、Webサーバーが403エラーを出し、おそらくソケットを強制終了することです。これは私が考えていることであり、コードがなければ、プログラム上のエラーやWebサーバーの構成だけを伝えることはできません。

于 2012-06-15T14:20:56.413 に答える
0

サイトのインターネット接続に問題がある可能性があり、スパイダーを停止しようとするコードが含まれている可能性があります。途中で奇妙なプロキシサーバーが存在する可能性があります。

于 2012-06-19T02:26:31.023 に答える
0

たぶん、index.phpを最後に追加してみてください(またはサイトのメインホームページが何であれ..index.htmlなど)。

ただし、これが問題の解決に役立つかどうかはわかりません。私はどこかで見つけたConnectionクラスを使用します。これは、基本的に上記の投稿の1つとして述べられています(Webブラウザーのヘッダーをエミュレートするため、JavaのデフォルトではなくFireFoxからのもののように見えます)は)。

一見の価値があると思います。

于 2012-06-23T16:25:39.247 に答える
0

他のカップルが言ったことに便乗するために、あなたのクローラーがネットワークスキャナーまたは侵入ツールとして認識され、扱われている可能性はありますか?

于 2012-06-23T21:02:50.710 に答える
0

Jsoupが何であるかはほとんどわかりませんが、HttpURLConnection.getErrorStream()を読んでおくことをお勧めします。この方法では、エラードキュメントを読むことができます。エラードキュメントのヘッダーフィールドへのアクセスは、接続が失敗した後も可能である必要があります。これは、通常のヘッダーフィールドへのアクセス方法です。これら2つ(本文とヘッダー)を組み合わせることで、サーバーが提供するすべての情報が提供されます。

于 2012-06-24T13:51:21.123 に答える