Ich erstelle einen Web-Crawler mit Java EE-Technologien. Ich habe einen Crawler-Dienst erstellt, der die Ergebnisse des WebCrawlers in Form von CrawlerElement
Objekte, die Informationen enthalten, die für mich von Interesse sind.
Derzeit verwende ich JSOUP
Bibliothek, um dies zu tun. Aber es ist nicht zuverlässig, ich versuche die Verbindung dreimal und auch die Zeitüberschreitung beträgt 10 Sekunden, trotzdem ist es unzuverlässig.
Mit unzuverlässig meine ich, dass das Crawler-Programm nicht darauf zugreifen kann, auch wenn es öffentlich zugänglich ist. Ich weiß, es könnte sein, aufgrund robots.txt
Ausschluss, aber auch hier ist es erlaubt, aber dennoch nicht realisierbar.
Deshalb habe ich mich für die URLConnection
Objekt, das über openConnection
und dann connect
Methode für diesen Zweck.
Ich habe noch eine weitere Anforderung, die mich stört, und das ist: Ich muss die Antwortzeit in Millisekunden für ein CrawlerElement erhalten, was bedeutet, wie viele Sekunden es dauerte, um Seite B von Seite A zu laden und ich habe die Methoden von URLConnection überprüft, es gibt keinen Ausweg, um das zu tun.
Irgendwelche Ideen zu diesem Thema? Kann mir jemand helfen?
Ich dachte, das Schreiben eines Codes vor und nach, die aktuelle Zeit in Millisekunden vor dem gettingContent-Code und aktuelle Zeit in Millisekunden subtrahieren und speichern, dass Millisekunden in der Datenbank, aber ich war Sache, ob es genau sein würde oder nicht?
Vielen Dank im Voraus.
EDIT : DERZEITIGE UMSETZUNG
Aktuelle Implementierung, die mir statusCode, contentType usw. liefert.
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);
}
}
was sagen, ist es okay, auf diese Weise zu tun, oder ich sollte schwere APIs wie Apache HttpClient oder Apache Nutch. verwenden.