【问题标题】:Best solution to host a crawler? [closed]托管爬虫的最佳解决方案? [关闭]
【发布时间】:2014-04-08 21:46:59
【问题描述】:

我有一个爬虫,它可以爬取几个不同的域以获取新帖子/内容。内容总量数十万页,每天都有大量新内容添加。因此,为了能够爬取所有这些内容,我需要我的爬虫 24/7 全天候爬取。

目前,我将爬虫脚本与爬虫添加内容的站点托管在同一台服务器上,并且我只能在夜间运行 cronjob 来运行脚本,因为当我这样做时,网站基本上会停止工作,因为脚本的负载。换句话说,一个非常糟糕的解决方案。

所以基本上我想知道这种解决方案的最佳选择是什么?

  • 是否可以在同一主机上继续运行爬虫,但以某种方式平衡负载以使脚本不会杀死网站?

  • 我会寻找什么样的主机/服务器来托管爬虫?除了普通的虚拟主机,我还需要其他规格吗?

  • 爬虫保存它爬取的图像。如果我将爬虫托管在辅助服务器上,如何将图像保存在我的站点服务器上?我想我不想在我的上传文件夹中使用 CHMOD 777 并允许任何人将文件放在我的服务器上。

【问题讨论】:

    标签: performance webserver hosting web-crawler


    【解决方案1】:

    我决定选择 Amazon Web Services 来托管我的爬虫,它们既有用于队列的 SQS,也有可自动扩展的实例。它还有 S3,我可以在其中存储我的所有图像。

    我还决定将我的整个爬虫重写为 Python 而不是 PHP,以便更轻松地利用队列等功能并保持应用 100% 的时间运行,而不是使用 cronjobs。

    那么我做了什么,这意味着什么

    1. 我为我的爬虫设置了一个 Elastic Beanstalk 应用程序,该应用程序设置为“Worker”并侦听一个存储所有需要爬取的域的 SQS。 SQS 是一个“队列”,我可以在其中保存每个需要爬取的域,并且爬虫将侦听队列并一次获取一个域,直到队列完成。不需要“cronjobs”或类似的东西,只要队列将数据放入其中,它就会将其发送给爬虫。这意味着爬虫 100% 的时间都在运行,24/7。

    2. 应用程序设置为自动缩放,这意味着当我的队列中有太多域时,它将设置第二个、第三个、第四个等...实例/爬虫以加快进程。我认为这对于任何想要设置爬虫的人来说都是非常非常重要的一点。

    3. 所有图像都保存在 S3 实例上。这意味着图像不会保存在爬虫的服务器上,并且可以轻松获取和使用。

    结果很好。当我每 15 分钟在 cronjobs 上运行一个 PHP Crawler 时,我每小时可以抓取大约 600 个 url。现在,我可以毫无问题地每小时抓取 10'000 多个网址,这取决于我设置自动缩放的方式。

    【讨论】:

    • 在#1 中,您声明您的爬虫侦听 SQS 并爬取队列中的域。您的应用程序如何决定何时添加新的或重新添加需要抓取的域?
    • 嗨凯文。就我而言,我想抓取一个特定的域,所以我每周只加载一次他们的站点地图,然后将大约 70,000 个页面添加到队列中。如果这对您的情况不起作用,您可以做的是让您的爬虫也找到它所爬取的每个页面上的所有链接,如果之前没有被爬取过,则将其添加到队列中。您还可以检查每个链接,看看它是传出链接还是内部链接。
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多