从蜘蛛Scrapy中调用Settings中的函数

时间:2016-11-04 08:20:03

标签: python scrapy

我有两只蜘蛛AB。 我需要调用一个在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

有什么我做错了或其他任何方式吗?

2 个答案:

答案 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