我正在使用Java EE技术创建网页爬虫。我已经创建了一个爬虫服务,其中包含WebCrawler的结果,以
目前我正在使用
因此,我决定使用
我还有一个要求,这让我困扰不已,那就是:对于一个CrawlerElement,我必须以毫秒为单位获取响应时间,也就是从页面A到页面B加载需要多少秒?我检查了URLConnection的方法,没有办法实现这一点。
对此有任何想法吗?有人能帮我吗?
我考虑在获取内容代码之前和之后编写一个代码,以毫秒为单位取得当前时间,并将当前时间减去获取内容代码之前的时间并将毫秒保存在数据库中,但我想知道这样做是否准确?
提前感谢。
编辑:当前实现
目前的实现可以给我提供statusCode、contentType等信息。
CrawlerElement
对象的形式存储,其中包含我感兴趣的信息。目前我正在使用
JSOUP
库来实现这一点。但是它不可靠,尽管我尝试连接三次并且超时时间为10秒,仍然不可靠。不可靠的意思是即使可以公开访问,也无法被爬虫程序访问。我知道这可能是由于robots.txt
排除导致,但即使是允许的情况下,它仍然不可靠。因此,我决定使用
URLConnection
对象,该对象具有openConnection
方法和connect
方法来实现这一点。我还有一个要求,这让我困扰不已,那就是:对于一个CrawlerElement,我必须以毫秒为单位获取响应时间,也就是从页面A到页面B加载需要多少秒?我检查了URLConnection的方法,没有办法实现这一点。
对此有任何想法吗?有人能帮我吗?
我考虑在获取内容代码之前和之后编写一个代码,以毫秒为单位取得当前时间,并将当前时间减去获取内容代码之前的时间并将毫秒保存在数据库中,但我想知道这样做是否准确?
提前感谢。
编辑:当前实现
目前的实现可以给我提供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呢?