使用 Jsoup 抓取网页时下载速度(连接)不稳定

Unstable download speed (connection) when scraping webpages using Jsoup

我目前正在使用我在 Java 中使用 Jsoup 编写的程序抓取网页。该程序需要抓取大约 450 urls(不是那么多)。

问题是我在抓取时下载速度非常不稳定

例如,前 7 url 秒会在 2 秒内立即被抓取,下载速度接近 1MB/秒,但下载速度突然下降到 0.4KB/sEVEN 0KB/s,导致程序需要 13 秒刮一个url。这种波动不断发生,导致程序严重变慢。

这不是我的互联网连接问题,因为它发生在我的工作和家庭无线互联网上。即使当前网速指示器显示下载速度为0KB/s,如果我通过浏览器打开网页,页面会立即加载,下载速度突然再次增加1MB/s。但是这个增加对我的程序没有影响,程序抓取 urls 仍然很慢。

可能是什么问题?我需要配置什么来确保我的抓取程序具有恒定的下载速度吗?

提前致谢!

这是一个与外部资源(需要下载的url)强相关的标准问题。

要解决这个问题,您可以创建一个线程池来同时下载不同的资源。即使单次下载速度很慢,同时下载也会让您有更多机会达到带宽限制。

总下载时间将减少到更接近您的带宽能力的值。

这是一个基本的最小示例。

ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();

记得先启动服务器,再启动客户端。


这里有一些指向线程池的链接,可以用作实现线程池同时下载许多 url 的起点:

可能是程序受内存限制。尝试在启动 Java 进程时增加堆 space。