【问题标题】:Creating a Web Crawler in Java EE在 Java EE 中创建 Web 爬虫
【发布时间】:2012-08-15 17:10:09
【问题描述】:

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

目前我正在使用JSOUP 库来执行此操作。但它不可靠我正在尝试连接 3 次,并且超时仍然是 10 秒它是不可靠的。

不可靠是指即使可以公开访问,也不能被爬虫程序访问。我知道这可能是由于robots.txt 排除,但在这方面也是允许的,但仍然不可靠。

所以我决定使用具有openConnectionURLConnection 对象,然后使用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


【解决方案1】:

最好使用经过验证的框架,而不是重新发明轮子。试试 Apache Nutch(我推荐 1.x 分支,2.x 似乎太原始了)。实现自己的爬虫并支持并行、robots.txt / "noindex" 元标记、重定向、可靠性会很痛苦......有很多问题需要解决。

【讨论】:

  • 嗨,决定使用 HtmlUnit API,可以在这里找到:htmlunit.sourceforge.net,它还具有加载时间功能。基本上它是用于测试的,但它拥有我需要的所有东西。感谢您的帮助。
【解决方案2】:

好的,这意味着您已经完成了该 API/Library 中的工作并遇到了问题。我知道构建一个东西然后浪费所有代码并转移到另一个东西是可怕的,但如果这对您来说是可能的 @987654324 @ 只是一个解析器库,将来可能会给您带来更多问题,因此我建议您使用这些more stable API。您也可以为此使用crawler4j
这是the list of some open source crawler API's,通过进行一些研发,您可以找到一个很好的解决方案:)

【讨论】:

    【解决方案3】:

    试试 Apache HttpClient 库。我用它取得了很好的效果。对于特定于 HTTP 的通信,这似乎要好一些。

    【讨论】:

    • 我想过这个库,但我不知道我不确定,它会支持 HTTPS 吗??
    • 是的,它似乎有很好的支持,虽然它有点冗长但还不错。
    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2018-08-13
    相关资源
    最近更新 更多