Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javaee中创建Web爬虫_Java_Jakarta Ee_Web_Web Crawler_Jsoup - Fatal编程技术网

在javaee中创建Web爬虫

在javaee中创建Web爬虫,java,jakarta-ee,web,web-crawler,jsoup,Java,Jakarta Ee,Web,Web Crawler,Jsoup,我正在使用JavaEE技术创建一个网络爬虫。我已经创建了一个爬虫服务,其中包含WebCrawler在术语crawleRelation对象中的结果,该对象包含我感兴趣的信息 目前我正在使用JSOUP库来实现这一点。但它是不可靠的,我尝试连接三次,而且超时时间是10秒,但仍然是不可靠的 我所说的不可靠是指即使它可以被公开访问,它也不能被爬虫程序访问。我知道这可能是由于robots.txt排除的原因,但这也是允许的,但仍然是不负责任的 因此,我决定使用URLConnection对象,该对象具有open

我正在使用JavaEE技术创建一个网络爬虫。我已经创建了一个爬虫服务,其中包含WebCrawler在术语
crawleRelation
对象中的结果,该对象包含我感兴趣的信息

目前我正在使用
JSOUP
库来实现这一点。但它是不可靠的,我尝试连接三次,而且超时时间是10秒,但仍然是不可靠的

我所说的不可靠是指即使它可以被公开访问,它也不能被爬虫程序访问。我知道这可能是由于
robots.txt
排除的原因,但这也是允许的,但仍然是不负责任的

因此,我决定使用
URLConnection
对象,该对象具有
openConnection
,然后使用
connect
方法进行此操作

我还有一个困扰我的要求,那就是:我必须获得爬网释放的响应时间(以毫秒为单位),这意味着从a页加载B页需要多少秒??我检查了URLConnection的方法,没有办法做到这一点

关于这个话题有什么想法吗?有人能帮我吗

我在考虑在之前和之后编写一个代码,在gettingContent代码和当前时间(以毫秒为单位)之前,用当前时间(以毫秒为单位)减去这些毫秒,然后保存到数据库中,但我想知道它是否准确

提前谢谢

编辑:当前实施

当前实现,它为我提供状态代码、内容类型等

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);     
   }
}

这样做可以吗?或者我应该使用ApacheHttpClient或ApacheNutch之类的重API

试试ApacheHttpClient库。我的成绩很好。对于特定于HTTP的通信来说,这似乎更好一些。

使用经验证的框架比重新发明轮子更好。试试ApacheNutch(我推荐1.x分支,2.x看起来太粗糙了)。实现自己的爬虫程序并支持并行性、robots.txt/“noindex”元标记、重定向、可靠性将是一件非常痛苦的事情。。。有很多问题需要解决

好的,这意味着您在该API/库中做了一些工作并遇到了问题。我知道构建一个API/库,然后浪费所有代码并转移到另一个API/库是很可怕的,但是如果您可能的话,因为
JSoup
只是一个解析器库,将来可能会给您带来更多问题,所以我建议您使用这些API/库。您可以也可用于此目的。

下面是一些,通过做一些研究和开发,你可以找到一个很好的解决方案:)

减去前后的时间对我来说相当准确。谢谢Danny。我认为对于加载时间,我将使用减法本身。我必须考虑使用哪种方法来获取实际内容。我考虑过这个库,但我不知道我不确定,它是否支持HTTPS?是的,它似乎有很好的支持,虽然有点冗长,但也不太糟糕。嗨,我决定使用HtmlUnit API,可以在这里找到:它还有一个加载时功能。基本上,它是为了测试,但它有我需要的所有东西。谢谢你的帮助。