我正在使用Java EE Technologies创建一个Web爬虫。我创建了一个爬虫服务,其中包含术语CrawlerElement
对象中WebCrawler的结果,其中包含我感兴趣的信息。
目前我正在使用JSOUP
库来执行此操作。但它不可靠我尝试连接三次,并且超时仍然是10秒仍然是不可靠的。
不可靠我的意思是即使可以公开访问它,爬虫程序也无法访问它。我知道这可能是由于robots.txt
排除,但在此也允许但仍然是不可行的。
所以我决定选择具有URLConnection
然后openConnection
方法的connect
对象来执行此操作。
我还有一个要求让我烦恼的是:我必须得到CrawlerElement的响应时间(以毫秒为单位),这意味着从页面A加载页面B需要多少秒。我检查了URLConnection的方法没有出路才能做到这一点。
该主题中的任何想法?谁能帮我?
我在考虑编写前后代码,在getContent代码之前以毫秒为单位,当前时间以毫秒为单位减去并保存数据库中的毫秒,但我是否准确无误?
提前致谢。
编辑:当前实施
当前实现,它给我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 ..
答案 0 :(得分:3)
使用经过验证的框架比重新发明轮子更好。尝试Apache Nutch(我推荐1.x分支,2.x似乎太原始)。实现支持并行性的自己的爬虫,robots.txt /“noindex”元数据,重定向,可靠性......将会有很多痛苦......有很多问题需要解决。
答案 1 :(得分:2)
好的,这意味着你已经完成了工作,并在API / Library中遇到问题。我知道构建一件事然后浪费所有代码并转移到另一件代码是可怕的,但是如果你有可能作为{{{ 1}}只是一个解析器库,将来可能会给你带来更多问题所以我建议你使用这些more stable API。你也可以使用crawler4j来实现这个目的。
这是the list of some open source crawler API's,通过做一些R& D你可以找到一个很好的解决方案:)
答案 2 :(得分:0)
尝试使用Apache HttpClient库。我用它取得了不错的成绩。对于HTTP特定通信来说,这似乎更好一点。