java - 在 Java EE 中创建网络爬虫

标签 java jakarta-ee web web-crawler jsoup

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

目前我正在使用 JSOUP 库来执行此操作。但它不可靠我尝试连接三次,超时也是 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。

最佳答案

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

关于java - 在 Java EE 中创建网络爬虫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973834/

相关文章:

java - 在多个索引上对 Int[] 的 ArrayList 进行排序

java - 如何检查字符串是否与字符串数组匹配

rest - @Path 和 @WebServlet 的区别

css - 网站 - 在 2 个 div 之间溢出图像

java - .net 到 Java - 序列化的 XML 可以工作吗?

java - 在 NetBeans 7.1.1 中创建 UML 类图

java - 在 EJB 中使用 @Timeout 代替 Thread.sleep()

java - JBoss中如何知道某个模块依赖于哪些模块?

javascript - 如何存储和显示(自动)用户可以在我的网站上提交的故事

html - 取消悬停时过渡不会缓和