Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让crawler4j更快地从页面下载所有链接?_Java_Crawler4j - Fatal编程技术网

Java 如何让crawler4j更快地从页面下载所有链接?

Java 如何让crawler4j更快地从页面下载所有链接?,java,crawler4j,Java,Crawler4j,我所做的是: -抓取页面 -获取页面的所有链接,将它们放入列表中 -启动一个新的爬虫程序,它访问列表的每个链接 -下载它们 必须有一个更快的方法,在那里我可以直接下载链接,当我访问网页?谢谢 通常的方法是将爬网和下载任务分离到单独的工作线程中,根据您的内存需求(即,您希望用于存储所有这些信息的最大RAM),使用最大数量的线程 但是,它已经为您提供了此功能。通过将下载和爬网分成不同的线程,您可以尝试最大限度地利用您的连接,尽可能多地提取您的连接可以处理的数据,以及提供信息的服务器可以向您发送的数据

我所做的是:
-抓取页面
-获取页面的所有链接,将它们放入列表中
-启动一个新的爬虫程序,它访问列表的每个链接
-下载它们


必须有一个更快的方法,在那里我可以直接下载链接,当我访问网页?谢谢

通常的方法是将爬网和下载任务分离到单独的工作线程中,根据您的内存需求(即,您希望用于存储所有这些信息的最大RAM),使用最大数量的线程

但是,它已经为您提供了此功能。通过将下载和爬网分成不同的线程,您可以尝试最大限度地利用您的连接,尽可能多地提取您的连接可以处理的数据,以及提供信息的服务器可以向您发送的数据。这方面的自然限制是,即使生成1000个线程,如果服务器仅以每秒0.3k的速度为您提供内容,您仍将以每秒300KB的速度下载内容。但恐怕你无法控制这方面

另一种提高速度的方法是在一个系统上运行爬虫程序,这个系统有一个通向互联网的更大的管道,因为我猜,你的最大下载速度是限制你当前获取数据速度的因素。例如,如果您在AWS实例(或任何云应用程序平台)上运行爬网,您将受益于与主干网的高速连接,通过有效地将带宽扩展到远远超出家庭或办公室连接的带宽(除非您在ISP工作),缩短了对网站集进行爬网所需的时间

从理论上讲,在管道非常大的情况下,对于要保存到本地(或网络)磁盘存储的任何数据,限制开始成为磁盘的最大写入速度。

自动为您执行此过程。首先添加一个或多个种子页。这些是首先获取和处理的页面。crawler4j然后提取这些页面中的所有链接,并将它们传递给shouldVisit函数。如果您真的想对所有函数进行爬网,那么这个函数应该在所有函数上都返回true。如果您只想对特定域中的页面进行爬网,则可以检查URL并根据该URL返回true或false

您应该访问的URL返回true,然后由爬虫线程获取,并对其执行相同的过程

示例代码是一个很好的开始示例