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を使用する必要があります。