我正在尝试使用云运行使 scrapy scraper 工作。主要思想是,云调度程序 cron 应该每 20 分钟触发一次网络爬虫并从不同站点获取数据。所有站点都具有相同的结构,因此我想使用相同的代码并并行执行抓取作业,执行类似
scrapy crawl scraper -a site=www.site1.com
和 scrapy crawl scraper -a site=www.site2.com
的操作。
我已经部署了一个版本的抓取工具,但它只能做
scrapy crawl scraper
。我怎样才能在执行命令的站点更改时做到这一点?
另外,我应该使用云运行作业还是服务?
没有直接的方法。
Cloud Scheduler 可以使用参数调用您的应用程序,但您需要为每组参数创建一个新作业。
云运行支持环境变量,但您需要重新部署应用程序才能修改它们。
您可以将应用程序的参数存储在 Secret Manager 或云存储中。然后,您的应用程序将从这些位置之一读取当前配置。
根据文档页面,有一个技巧。
CLOUD_RUN_TASK_INDEX
环境变量。该变量指示正在执行的任务的编号。对于每个不同的数字,在网站文件中选择一行(行号等于环境变量值)。这样,您可以利用 Cloud Run 作业和并行性。
这里的主要权衡是要废弃的网站列表的静态形式。