我正在使用 Java EE 技术创建网络爬虫。我已经创建了一个爬虫服务,其中包含 WebCrawler 在 CrawlerElement
对象中的结果,其中包含我感兴趣的信息。
目前我正在使用 JSOUP
库来执行此操作。但它不可靠我尝试连接三次,超时也是 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。
请您参考如下方法:
最好使用经过验证的框架,而不是重新发明轮子。尝试 Apache Nutch(我推荐 1.x 分支,2.x 似乎太原始了)。在支持并行性、robots.txt/“noindex”元标记、重定向、可靠性的情况下实现自己的爬虫会很痛苦……有很多问题需要解决。