【问题标题】:How to distribute spiders across the cluster using Scrapyd and ScrapydWeb?如何使用 Scrapyd 和 ScrapydWeb 在集群中分布蜘蛛?
【发布时间】:2020-05-06 16:33:26
【问题描述】:

我正在一个使用 Scrapy 的爬虫项目中工作,我需要将我的蜘蛛分布在集群中的不同节点上,以加快进程。我正在使用 ScrapydWeb 来管理它,并且我已经配置了两台机器,其中一台安装了 ScrapydWeb,两台都安装了 Scrapyd。网络应用程序可以识别两者,我可以正常运行我的蜘蛛。问题是爬取只是并行运行(两台机器都在获取内容),我的目的是以分布式方式进行,以尽量减少爬取时间。

有人可以帮我吗?提前谢谢你。

【问题讨论】:

  • 你搞定了吗??
  • 是的,@user3125823。我使用了 Scrapy Cluster。
  • Scrapy Cluster 是否易于安装/设置和运行?你能简单分享一下你的经验吗?
  • 当然,@user3125823!我会将其发布为我的问题的答案。

标签: scrapy web-crawler distributed-computing scrapyd


【解决方案1】:

我不认为 Scrapyd 和 ScrapydWeb 提供了跨不同服务器运行蜘蛛的可能性,而不仅仅是完全运行同一个蜘蛛。如果您想分发抓取,您可以:

  • 仅在 1 个服务器上运行 1 个蜘蛛
  • 如果您需要实际的分布式爬虫(同一蜘蛛在不同机器上运行,而没有多台机器解析相同的 url),您可以查看Scrapy-Cluster
  • 您可以编写自定义代码,其中有 1 个进程生成要在一侧抓取的 url,将找到的 url 放入队列中(使用 Redis f.e.),并让多个服务器从该队列中弹出 url 以获取和解析页面

【讨论】:

    【解决方案2】:

    我使用 Scrapy Cluster 解决了这个问题,我正在分享我的经验:

    Docker 安装对我来说很难控制和调试,所以我尝试了 Cluster Quick-start 并且效果更好。

    我的集群中有五台机器可用,我用一台来托管 Apache Kafka 和 Zookeeper。我也有一个用于 Redis DB。确保这些机器可用于您将用于爬取的机器的外部访问,这一点很重要。

    当这三个组件都正确安装并运行后,我在 python3.6 环境中安装了 Scrapy Cluster 的需求。然后,我用主机的 IP 地址配置了一个本地设置文件,并确保所有在线和离线测试都通过了。

    一切都设置好了,我能够运行第一个蜘蛛(官方文档提供了一个示例)。这个想法是您为您的蜘蛛创建实例(例如,您可以使用 tmux 打开 10 个不同的终端窗口并在每个窗口运行一个实例)。当您向 Apache Kafka 提供要抓取的 URL 时,它会被发送到 Redis 的队列中,您的实例将定期在该队列中寻找要抓取的新页面。

    如果您的爬虫从您最初传递的 URL 中生成更多 URL,它们会返回到 Redis 以被其他实例抓取。这就是你可以看到这种分布的力量的地方。

    一旦页面被抓取,结果就会被发送到 Kafka 主题。

    official documentation 很大,您可以找到有关安装和设置的更多详细信息。

    【讨论】:

    • 1 个快速问题。你为什么选择这个而不是 Frontera?
    • 没问题,@user3125823!实际上,我还没有尝试过 Frontera,但我知道有类似的目的。也许我将来会尝试比较它们的效率:)
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多