3

JavaEETechnologiesを使用してWebクローラーを作成しています。CrawlerElement関心のある情報を含む用語オブジェクトにWebCrawlerの結果を含むクローラーサービスを作成しました。

現在JSOUP、これを行うためにライブラリを使用しています。しかし、信頼性がありません。接続を3回試行し、タイムアウトも10秒です。信頼性がありません。

信頼できないとは、公的にアクセスできたとしても、クローラープログラムではアクセスできないことを意味します。除外が原因である可能性があることは知っていますrobots.txtが、それも許可されていますが、それでも実現不可能です。

そこで、これを行うためのメソッドを持つURLConnectionオブジェクトを使用openConnectionすることにしました。connect

私を悩ませているもう1つの要件があります。それは、CrawlerElementの応答時間をミリ秒単位で取得する必要があるということです。これは、ページAからページBをロードするのに何秒かかったかを意味します。そして私はURLConnectionのメソッドをチェックしました。それを行うための方法はありません。

そのトピックのアイデアはありますか?誰か助けてもらえますか?

getContentコードの前にミリ秒単位の現在の時間を取り、ミリ秒単位の現在の時間をデータベースにそのミリ秒を差し引いて保存する前後のコードを書くことを考えていましたが、それが正確かどうかはわかりませんでしたか?

前もって感謝します。

編集:現在の実装

statusCode、contentTypeなどを提供する現在の実装。

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;


public class GetContent {
public static void main(String args[]) throws IOException {
    URL url = new URL("http://www.javacoffeebreak.com/faq/faq0079.html");
    long startTime = System.currentTimeMillis();
    URLConnection uc = url.openConnection();
    uc.setRequestProperty("Authorization", "Basic bG9hbnNkZXY6bG9AbnNkM3Y=");
    uc.setRequestProperty("User-Agent", "");
    uc.connect();
    long endTime = System.currentTimeMillis();
    System.out.println(endTime - startTime);
    String contentType = uc.getContentType();
    System.out.println(contentType);
    String statusCode = uc.getHeaderField(0);
    System.out.println(statusCode);     
   }
}

この方法で問題ないか、ApacheHttpClientやApacheNutchなどの重いAPIを使用する必要があります。

4

3 に答える 3

3

一からやり直すよりも、実績のあるフレームワークを使用する方がよいでしょう。Apache Nutch を試してみてください (1.x ブランチをお勧めします。2.x は生すぎるようです)。並列処理、robots.txt / "noindex" メタタグ、リダイレクト、信頼性をサポートする独自のクローラーを実装するのは大変な作業です。解決すべき問題はたくさんあります。

于 2012-08-15T17:24:49.700 に答える
2

OK は、その API/ライブラリで作業を行って問題が発生したことを意味します。あるものをビルドしてから、そのすべてのコードを無駄にして別のものに移行するのは恐ろしいことですが、それが可能であれば、JSoup単なるパーサー ライブラリです。将来的にさらに問題が発生する可能性があるため、これらのより安定した APIを使用することをお勧めします。その目的でクローラー 4jを使用することもできます。
以下は、いくつかのオープンソースのクローラー API のリストです。いくつかの研究開発を行うことで、これに対する適切な解決策を見つけることができます :)

于 2012-08-15T17:31:55.217 に答える
0

Apache HttpClient ライブラリを試してください。私はそれで良い結果を得ました。HTTP 固有の通信については、少し良いようです。

于 2012-08-15T17:14:34.337 に答える