我在bash脚本中运行着多个蜘蛛,如下所示:
pipenv run scrapy runspider -o output-a.json a.py
pipenv run scrapy runspider -o output-b.json b.py
由于它们应该运行很长时间,因此我想采用一种简单的方法来监视其成功率;我的计划是在两个刮板都成功运行(即它们没有任何错误消息)时对https://healtchecks.io进行ping操作。我在代码上撒了一些assert
语句,以便对此有足够的信心。
pipenv run scrapy runspider -o output-a.json a.py
result_a=$?
pipenv run scrapy runspider -o output-b.json b.py
result_b=$?
if [ $result_a -eq 0 && $result_b -eq 0]; then
curl $url
fi
我的问题是,无论如何,每个scrapy runspider
命令总是返回0
。这意味着我无法真正检查它们是否成功。
有没有办法影响这种行为?我找不到一些命令行标志吗?如果没有,我将如何从python脚本运行两个蜘蛛并将它们的输出保存到定义的位置?我找到了this link,但没有提及如何处理退回的物品。
答案 0 :(得分:0)
我最终解决此问题的方法是将日志输出分配给变量,并grep
将其ERROR: Spider error processing
解析。 Scrapy具有很好的行为,不会过早失败。如果我自己退出python脚本,我会丢失的。这样,我可以一个接一个地运行刮板并最终处理错误,因此在某些情况下无法100%平稳运行的情况下,我仍然可以在收集更多信息的同时得到通知。