【发布时间】:2012-01-10 14:11:08
【问题描述】:
我所做的是:
- 抓取页面
- 获取页面的所有链接,将它们放在一个列表中
- 启动一个新的爬虫,它会访问列表中的每个链接
- 下载它们
一定有更快捷的方式,访问页面时可以直接下载链接吗?谢谢!
【问题讨论】:
我所做的是:
- 抓取页面
- 获取页面的所有链接,将它们放在一个列表中
- 启动一个新的爬虫,它会访问列表中的每个链接
- 下载它们
一定有更快捷的方式,访问页面时可以直接下载链接吗?谢谢!
【问题讨论】:
一般的方法是将抓取和下载任务分离到单独的工作线程中,线程的最大数量取决于您的内存要求(即您要用于存储所有这些信息的最大 RAM)。
但是,crawler4j 已经为您提供了此功能。通过将下载和抓取分成单独的线程,您可以尝试最大限度地利用您的连接,尽可能多地拉取您的连接可以处理的数据,以及提供信息的服务器可以发送给您的数据。对此的自然限制是,即使您生成 1,000 个线程,如果服务器仅以每秒 0.3k 的速度为您提供内容,那么您每秒下载的内容仍然只有 300 KB。但恐怕你无法控制它的这方面。
另一种提高速度的方法是在连接互联网的管道较粗的系统上运行爬虫,因为我猜你的最大下载速度是当前获取数据速度的限制因素。例如,如果您在 AWS 实例(或任何云应用程序平台)上运行抓取,您将受益于它们与主干网的极高速连接,并通过以下方式缩短抓取一组网站所需的时间有效地扩展您的带宽,远远超出您在家庭或办公室连接中获得的带宽(除非您在 ISP 工作,也就是说)。
理论上,在您的管道非常大的情况下,对于您要保存到本地(或网络)磁盘存储的任何数据,限制开始成为磁盘的最大写入速度。
p>【讨论】: