我如何才能让crawler4j更快速地从页面下载所有链接?

问题描述:

我要做的就是:
- 抓取页面
- 抓取网页的所有链接,将它们放在一个列表
- 开始一个新的履带,其访问列表中的每个环节
- 下载它们
我如何才能让crawler4j更快速地从页面下载所有链接?

必须有更快捷的方式,我可以在浏览页面时直接下载链接吗?谢谢!

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

然后,您的shouldVisit返回true的URL将由抓取程序线程抓取,并对其执行相同的过程。

示例代码here是一个很好的启动示例。

+0

这很完美,谢谢! – seinecle 2012-01-11 09:08:38

一般的方法是根据您的内存要求(即您想要用于存储所有这些信息的最大RAM),将抓取和下载任务分离为单独的工作线程,并使用最大数量的线程。

但是,crawler4j已经为您提供此功能。通过将下载和抓取拆分为单独的线程,您可以尝试最大限度地利用连接,将连接能够处理的数据拉下来,并且提供信息的服务器可以发送给您。对此的自然限制是,即使您产生了1,000个线程,如果服务器仅以每秒0.3k的速度向您提供内容,那么您仍将下载每秒仅300 KB的内容。但恐怕你对这方面没有任何控制权。

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

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