我使用Python和Scrapy(https://scrapy.org/)实现了一个Web爬虫。
有三个不同的过程需要连续运行。第一个将配置文件密钥写入MongoDB集合,第二个将抓取所有子域以获取给定的配置文件并将其写入另一个集合,第三个将特定的配置文件数据写入SQL
数据库。
现在我想自动运行这些进程。我查看了模块计划(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部署蜘蛛,因为我的第三个进程不是蜘蛛。
提前谢谢!
答案 0 :(得分:0)
我建议你阅读Scrapy文档的这一部分:
https://doc.scrapy.org/en/latest/topics/practices.html
特别是它所说的部分:通过链接延迟来顺序运行蜘蛛。
您可以做的是将蜘蛛和数据导出脚本链接到一个跑步者脚本中。比使用python scheduler模块定期调用该脚本。
android.os.AsyncTask