我试图找出最可靠的方法来获取网页内容,其中url作为输入参数在Java中?
我尝试过的事情是: 1. JSOUP 2. HtmlUnit 3. URL和URLConnection
1&的问题2他们有时会抛出SocketTimeoutException或者行为不可预测,即使可以获取页面的内容(即使robots.txt允许)。
使用3我无法在不使用毫秒减法的情况下获得loadTime。这是最大的问题,会产生不准确的结果。另外,为了获取内容,我需要使用Streams并逐行读取内容。
当前的实现使用方法#2。它具有LoadTime和contentType的功能。
对于每个网页的内容,我需要contentType,loadTime等。
基本上它是用于验证整个网站的链接验证器项目,包括css的背景图像,图像,js,html等。所以基于contentType我只过滤和解析HTML的内容。
P.S。将超时提高超过9秒将使链接验证变慢。所以我目前的超时是9秒。
我需要帮助,因为我想让我的链接验证工具尽可能可靠。
答案 0 :(得分:2)
听起来您的问题分为两部分:
如何从远程服务器获取内容
如何解析内容以进行链接验证
而你的问题实际上是关于第1部分,但你同时考虑第1部分和第2部分。这可能是您问题的一部分。
真正的问题是阅读远程内容。所有这三种方法都是使用完全相同的后台API读取内容,即JRE内置的基于URLConnection的解决方案。 URLConnection是可以的,但不是真正想要在真实网络上使用的。
您可以使用几个更好的库来通过HTTP协议获取远程资源的内容...
我发现即使在阻止模式下,AsyncHttpClient也是最好用的。它有一个非常好的API来获取页面,它适用于多线程。您应该很容易获得总加载时间,更重要的是,您应该能够并行完成大量工作。
您实质上将使用AsyncHttpClient加载内容,然后将该内容传递到JSoup(或者您喜欢的任何内容...... JSoup是我推荐的那个)并在那里进行解析。
错误不是使用JSoup或HtmlUnit,而是尝试使用它们来做所有事情。这些工具旨在做一件事并做好一件事......你需要做两件事,所以使用两个工具,每个工具都针对手头的任务进行了优化。
答案 1 :(得分:0)
你应该实现某种重试机制。