我有两只蜘蛛A
和B
。
我需要调用一个在spider settings.py文件中定义的函数
Project Name
|--Project Name
| |-- spiders
| | |-- __init__.py
| | |-- A.py
| | |-- B.py
| |-- __init__.py
| |-- items.py
| |-- pipelines.py
| |-- settings.py
settings.py中有一个函数,我需要在蜘蛛关闭时从A.py和B.py访问
settings.py
def revoke_ip():
logging.info('Revoking access')
这是我从A.py尝试的:
def closed(self, reason):
logging.info('Spider terminating because of %s' % reason)
current_project_settings = get_project_settings()
revoke_ip_call = getattr(current_project_settings, "revoke_ip")
revoke_ip_call()
但是这件事不起作用,也没有提到here
有什么我做错了或其他任何方式吗?
答案 0 :(得分:1)
导入文件时,Python仅搜索当前目录,运行入口点脚本的目录,以及包含软件包安装目录等位置的sys.path。您可以导入设置文件以调用该功能。为此,请将此添加到您的函数中:
import sys
sys.path.insert(0, '../')
import settings
答案 1 :(得分:0)
由于@Jose发布的答案,对我有用的是,settings.py
与我正在运行的蜘蛛位于不同的目录中,而Python只搜索当前目录。
所以我尝试检查它每次运行蜘蛛时给出的文件的路径,显然我得到的路径是
/tmp/unpacked-eggs/__main__.egg/project name/spiders
所以,我必须做的是:
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + '/../')
import settings