web-scraping - Scrapy蜘蛛之间的分布式通信
问题描述
我想以协调的方式运行两个蜘蛛。第一个蜘蛛将抓取一些网站并生成 URL,第二个蜘蛛将使用这些地址。我等不及第一个蜘蛛完成然后启动第二个,因为网站变化非常快,第一个蜘蛛生成的 URL 需要立即抓取。一个非常简单的架构如下所示。目前,我为每个抓取作业分别使用Scrapy 。知道我该怎么做吗?每个蜘蛛的行为方式不同(具有不同的设置)并执行不同的工作。将它们放在不同的机器上(分布式)会很好。
解决方案
你的两个蜘蛛仍然可以独立。它们不需要协调,也不需要相互通信。两者都只需要访问中央数据库。
Spider1 只负责用 URL 填充数据库表。而 Spider2 只负责读取它(如果你想跟踪,可能会更新行)。两个蜘蛛都可以独立启动/停止。如果 Spider1 停止,那么只要有 URL,Spider2 仍然可以继续运行。
在当前没有更多用于 Spider2 的 URL 的情况下,您可以通过配置spider_idle
引发DontCloseSpider
异常的信号(文档)来使其保持活动状态。此时您还可以从数据库中获取一批新的 URL 并对其进行爬取(信号中的爬取示例)。
或者,您可以使用类似 cron 的东西来安排每隔几分钟执行一次 Spider2。然后你不必担心让它活着。
推荐阅读
- java - @WebInitParam 值在 JSP 中为空
- postgresql - postgresql:在命令行中使用 psql 运行 SQL 命令
- sql - VBA - 将 SQL 表中的所有行导入 Excel
- oracle - 如何在线获取 Oracle SQL Worksheet 中未命名的 PL/SQL 块的输出?它显示 SET SERVEROUTPUT ON 的命令不受支持;
- html - 上一个 td 包含特定文本时如何选择 td 值
- java - android studio 中的 INSTALL_PARSE_MANIFEST_MALFORMED 错误
- mule - 在mule中访问forEach内部的变量
- charts - 谷歌图表不工作。如何解决?
- mysql - 需要帮助编写内部连接查询
- c# - Unity+VisualStudio:C#代码反汇编不可用?