【发布时间】:2012-08-15 17:10:09
【问题描述】:
我正在使用 Java EE 技术创建一个网络爬虫。我创建了一个爬虫服务,其中包含 WebCrawler 在术语 CrawlerElement 对象中的结果,其中包含我感兴趣的信息。
目前我正在使用JSOUP 库来执行此操作。但它不可靠我正在尝试连接 3 次,并且超时仍然是 10 秒它是不可靠的。
不可靠是指即使可以公开访问,也不能被爬虫程序访问。我知道这可能是由于robots.txt 排除,但在这方面也是允许的,但仍然不可靠。
所以我决定使用具有openConnection 的URLConnection 对象,然后使用connect 方法来执行此操作。
我还有一个困扰着我的要求,那就是:我必须获取 CrawlerElement 的响应时间(以毫秒为单位),这意味着从页面 A 加载页面 B 需要多少秒?我检查了 URLConnection 的方法,没有办法做到这一点。
关于该主题的任何想法?谁能帮我?
我正在考虑在之前和之后编写一个代码,在gettingContent代码之前以毫秒为单位的当前时间和以毫秒为单位的当前时间减去并将该毫秒保存在数据库中,但我认为它是否准确?
提前致谢。
编辑:当前实现
Current Implementation,它给了我 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);
}
}
这样说可以吗,或者我应该使用像 Apache HttpClient 或 Apache Nutch 这样的重型 API。..
【问题讨论】:
-
减去前后的时间对我来说听起来很准确。
-
谢谢丹尼。我认为对于加载时间,我将使用减法本身。我必须考虑使用哪种方法来实际获取内容。
标签: java jakarta-ee web web-crawler jsoup