我有一个爬虫,可以爬行几个不同的域以获取新帖子/内容。内容总量数十万页,并且每天都有大量新内容添加。因此,为了能够爬行所有这些内容,我需要我的爬虫程序 24/7 进行爬行。
目前,我将爬网程序脚本托管在与爬网程序添加内容的网站相同的服务器上,并且我只能运行 cronjob 在夜间运行脚本,因为当我这样做时,网站基本上会停止工作,因为脚本的负载。换句话说,这是一个非常蹩脚的解决方案。
所以基本上我想知道这种解决方案的最佳选择是什么?
是否可以继续从同一主机运行爬虫,但以某种方式平衡负载,以便脚本不会杀死网站?
我需要什么样的主机/服务器来托管爬虫?除了普通的虚拟主机之外,我还需要其他规格吗?
爬虫保存它爬取的图像。如果我将爬网程序托管在辅助服务器上,如何将图像保存在网站的服务器上?我想我不想在我的上传文件夹上使用 CHMOD 777 并允许任何人将文件放在我的服务器上。
我决定选择 Amazon Web Services 来托管我的爬虫,它们既有用于队列的 SQS,也有自动可扩展实例。它还有 S3,我可以在其中存储所有图像。
我还决定将整个爬虫程序重写为 Python 而不是 PHP,以便更轻松地利用队列等功能并保持应用程序 100% 运行,而不是使用 cronjobs。
那么我做了什么,这意味着什么
我为我的爬网程序设置了一个 Elastic Beanstalk 应用程序,该应用程序设置为“Worker”并侦听 SQS,其中存储了需要爬网的所有域。 SQS 是一个“队列”,我可以在其中保存需要爬行的每个域,爬虫将侦听队列并一次获取一个域,直到队列完成。不需要“cronjobs”或类似的东西,一旦队列将数据放入其中,它就会将其发送给爬虫。这意味着爬虫程序 100% 的时间(24/7)都处于运行状态。
应用程序设置为自动缩放,这意味着当队列中有太多域时,它将设置第二个、第三个、第四个等......实例/爬虫以加快该过程。我认为这对于任何想要建立爬虫的人来说都是非常非常非常重要的一点。
- 所有图像都保存在 S3 实例上。这意味着图像不会保存在爬虫的服务器上,并且可以轻松获取和使用。
结果非常好。当我有一个 PHP 爬虫每 15 分钟在 cronjobs 上运行一次时,我每小时可以爬行大约 600 个 URL。现在,我每小时可以毫无问题地抓取 10'000 多个网址,甚至更多取决于我设置自动缩放的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)