2016-11-04 57 views
0

我有两个蜘蛛AB。 我需要调用它在蜘蛛settings.py文件中定义的函数从蜘蛛Scrapy调用一个函数设置

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

有什么,我做错了或任何其他方式做到这一点?

回答

1

导入文件时,Python只会搜索当前目录,运行入口点脚本的目录以及包含位置(如程序包安装目录)的sys.path。您可以导入设置文件以调用该功能。要做到这一点,添加到您的函数:

import sys 
sys.path.insert(0, '../') 
import settings 
+0

而我该如何调用撤销函数settings.revoke()? 如果我从'scrapy crawl A'的外部'project name'文件夹中运行爬虫,我得到一个错误'ImportError:No module named settings' – Vaulstein

+0

这个东西部分地解决了我的问题,所以我打开了答案。谢谢! – Vaulstein

+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