我正在使用 Java EE 技术创建一个网络爬虫。我创建了一个爬虫服务,其中包含 WebCrawler 在术语CrawlerElement
对象中的结果,其中包含我感兴趣的信息。
目前我正在使用JSOUP
图书馆来做到这一点。但它不可靠我正在尝试连接 3 次,并且超时仍然是 10 秒它是不可靠的。
不可靠是指即使可以公开访问,爬虫程序也无法访问。我知道这可能是由于robots.txt
排斥,但在这方面也是允许的,但它仍然是不现实的。
因此,我决定使用URLConnection
具有openConnection
然后connect
执行此操作的方法的对象。
我还有一个困扰着我的要求,那就是:我必须以毫秒为单位获取 CrawlerElement 的响应时间,这意味着从页面 A 加载页面 B 需要多少秒?我检查了 URLConnection 的方法,没有办法做到这一点。
在那个话题上有什么想法吗?谁能帮我?
我在考虑编写一个代码之前和之后在gettingContent代码之前以毫秒为单位的当前时间和以毫秒为单位的当前时间减去并将该毫秒保存在数据库中,但我认为它是否准确?
提前致谢。
编辑:当前实现
当前的实现,它给了我 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);
}
}
怎么说可以这样做,或者我应该使用重型 API,如 Apache HttpClient 或 Apache Nutch ..