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



我目前正在使用Jsoup用Java编写的程序抓取网页。该程序需要抓取大约450个url(并没有那么多)。

问题是,我得到非常不稳定的下载速度时抓取。

例如,前7个url将在2秒内立即被抓取,下载速度接近1MB/s,但随后下载速度突然下降到0.4KB/s甚至0KB/s,导致程序需要13秒才能抓取一个url。这种波动不断发生,并导致程序严重减速。

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

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

提前感谢!

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

为了解决这个问题,你可以创建一个线程池来同时下载不同的资源。同时下载给你更多的可能性,以达到你的带宽的极限,如果单一下载是非常缓慢的。

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

这里有一个基本的最小示例。

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

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


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

    Oracle教程
  • Jenkov教程(一个非常好的教程)
  • Oracle文档

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

最新更新