【问题标题】:Scrapy (Python) throws ImportError when running with cron使用 cron 运行时,Scrapy (Python) 抛出 ImportError
【发布时间】:2016-06-24 23:35:34
【问题描述】:

我正在使用 cron 运行一个 scrapy 蜘蛛,但它会引发 ImportError 异常:

Traceback (most recent call last):
  File "/Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py", line 2, in <module>
    import scrapy
  File "/Library/Python/2.7/site-packages/scrapy/__init__.py", line 48, in <module>
    from scrapy.spiders import Spider
  File "/Library/Python/2.7/site-packages/scrapy/spiders/__init__.py", line 10, in <module>
    from scrapy.http import Request
  File "/Library/Python/2.7/site-packages/scrapy/http/__init__.py", line 12, in <module>
    from scrapy.http.request.rpc import XmlRpcRequest
  File "/Library/Python/2.7/site-packages/scrapy/http/request/rpc.py", line 7, in <module>
    from six.moves import xmlrpc_client as xmlrpclib
ImportError: cannot import name xmlrpc_client

奇怪的是,当我运行 cron 正在运行的脚本时,它运行良好。

cron设置为

*   *   *   *   *   sh /Users/som/sh/hm_scraping.sh

脚本是

#!/bin/bash
python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py

我正在使用此处描述的 CrawlerProcess 类:http://doc.scrapy.org/en/latest/topics/practices.html

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(HmSpider)
process.start()

================================================ =
编辑

基于 MuhammadTahir 和 lapinkoira cmets,我直接在终端中测试了以下内容:

/usr/bin/python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py

sudo -u som /usr/bin/python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py

第一个运行良好,但是当我使用 sudo 时(我也没有设置用户就运行了),它返回了同样的问题。也许 cron 在后台使用 sudo。

有什么想法吗??

谢谢!

【问题讨论】:

  • 你使用 virtualenv 吗?哪个用户运行 cron,哪个用户运行脚本?
  • hm_scraping.sh 中使用python 二进制文件的完整路径(/usr/bin/python/path/to/venv/python)而不是仅使用python 应该可以解决它。
  • @MuhammadTahir,没用。
  • @lapinkoira,我猜是“som”。我运行sudo crontab -u som -e 并且设置在那里,当我运行sudo crontab -u root -e 时它是空的。它还会向 /var/mail/som 发送一封“电子邮件”。
  • 您是否尝试过以 som 的用户身份手动运行脚本?比如 su - som -c "执行脚本"

标签: python python-2.7 cron scrapy


【解决方案1】:

我会尝试两者之一:

1- 先激活环境:

source /path/of/your/venv/bin/activate && /path/of/your/venv/bin/python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py

2- 或不激活环境(可能不起作用):

/path/of/your/venv/bin/python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py

【讨论】:

  • 成功了!!我认为我的计算机中的用户权限都很疯狂,因为我不太确定如何以及何时使用 sudo。真令人惊讶,问题是……嗯……用户……=P 谢谢!
猜你喜欢
  • 2019-04-01
  • 2015-09-07
  • 2019-12-24
  • 2016-10-06
  • 2011-05-12
  • 1970-01-01
  • 2018-12-12
  • 2017-07-12
相关资源
最近更新 更多