【问题标题】:python & scrapy bashfile sequential conflictpython & scrapy bashfile 顺序冲突
【发布时间】:2017-09-22 09:01:24
【问题描述】:

设置

我有一个名为 rooms 的 Scrapy 蜘蛛,一个名为 liverpool_rooms.py 的 Python 脚本,以及一个名为 liverpool_rooms.csv 的先前“运行”的现有蜘蛛输出文件。


问题

我想从名为start_liverpool.txt 的 bash 文件中依次激活蜘蛛和脚本。

由于 Scrapy 不能覆盖而只能将输出附加到现有文件,因此在此顺序激活之前,我想删除 liverpool_rooms.csv 以便 Scrapy 创建一个新的 liverpool_rooms.csv

bash 文件如下,

  1. 删除现有文件liverpool_rooms.csv
  2. 运行蜘蛛rooms
  3. 运行脚本liverpool_rooms.py

重要提示:liverpool_rooms.py 进口蜘蛛出口 liverpool_rooms.csv


Bash 文件
#!/bin/bash

cd /Users/.../spiders
PATH=$PATH:/usr/local/bin
export PATH
rm liverpool_rooms.csv &&
scrapy crawl rooms -o liverpool_rooms.csv &&
python liverpool_rooms.py


冲突

我在运行 bash 文件时收到 liverpool_rooms.py 的错误,指出找不到 liverpool_rooms.csv。这是因为rm liverpool_rooms.csv 删除了.csv 文件,显然python liverpool_rooms.py 在运行蜘蛛之前检查了错误。

如何防止在运行蜘蛛之前检查liverpool_rooms.py 的错误?

【问题讨论】:

  • 您是否打算将Run spider rooms 作为后台进程运行?
  • 我不确定我是否理解。最终,我想通过 cron 作业每周运行一次 bash 文件。我希望它按顺序执行步骤 1. 2. 和 3.。
  • 由于你有由&&分隔的语句,如果第一个失败,第二个和第三个语句将不会执行(当找不到csv文件时,rm将失败)。
  • 您是否打算仅在文件存在时删除文件,如果文件不存在则继续执行 2) 和 3)?
  • 啊,我明白了。我也试过rm liverpool_rooms.csv; scrapy crawl rooms -o liverpool_rooms.csv; python liverpool_rooms.py,但它给出了同样的错误。

标签: python bash scrapy conflict


【解决方案1】:

在第一次运行此脚本时,不会有要删除的 csv 文件,因此脚本会失败。

解决方案:

#!/bin/bash

cd /Users/.../spiders
PATH=$PATH:/usr/local/bin
export PATH
rm liverpool_rooms.csv ; true
scrapy crawl rooms -o liverpool_rooms.csv
python liverpool_rooms.py

说明:

  • ; true 使脚本在执行删除时忽略任何错误
  • 我删除了 &&,因为它在脚本中不是必需的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2018-05-10
    • 2021-08-03
    • 2022-01-12
    • 2013-06-15
    相关资源
    最近更新 更多