【发布时间】:2018-08-25 06:25:59
【问题描述】:
我使用 Python 和 Scrapy (https://scrapy.org/) 实现了一个网络爬虫。
需要依次运行三个不同的进程。第一个将配置文件键写入 MongoDB 集合,第二个爬取给定配置文件的所有子域并将它们写入另一个集合,第三个将特定配置文件数据写入 SQL 数据库。
现在我想自动运行这些进程。我查看了模块 Schedule (https://github.com/dbader/schedule, https://schedule.readthedocs.io/en/stable/index.html) 并编写了以下代码:
import schedule
import time
from scrapy import cmdline
from scrapers.scrapy_new_users.helpers.dataAggregator import DataAggregator
def run_key_fetcher():
print("Running key_fetcher")
command = "scrapy crawl fetch_profile_keys ".split()
cmdline.execute(command)
def run_profile_scraper():
print("Running profile_scraper")
command = ("scrapy crawl fetch_profiles "
"-a login_user=user"
"-a login_password=password").split()
cmdline.execute(command)
def run_data_aggregator():
print("Running data_aggregator")
data_aggregator = DataAggregator()
data_aggregator.parse()
schedule.every().day.at("1:00").do(run_key_fetcher)
schedule.every().day.at("2:00").do(run_profile_scraper)
schedule.every().day.at("12:00").do(run_data_aggregator)
while True:
schedule.run_pending()
time.sleep(1)
运行此代码时,第一个作业在给定时间开始,我得到一个Process finished with exit code 0。之后调度程序停止,其他作业不运行。
我怀疑这是“进程完成”的正常行为,但有什么办法可以解决吗? 还是我应该使用一些不同的调度模块?
我没有通过 scrapyd 部署蜘蛛,因为我的第三个进程不是蜘蛛。
提前谢谢你!
【问题讨论】:
标签: python scrapy scheduled-tasks scheduler scrapy-spider