(Python) 如何在一个模块中导入 __init__ 的参数以供另一个模块使用?
我刚开始学习Python,并且在用Scrapy做一些网络爬虫。当我在终端运行一个爬虫时,可以用“-a NAME=VALUE”来设置参数,这样做特别方便,可以让爬虫去不同的网站。我想把“domain”这个参数作为一个变量在另一个模块中使用,但遇到了困难。下面是我想要从中导入参数的模块的一部分:
class Spider(spiders.CrawlSpider):
name = 'changelog'
rules = (spiders.Rule(SgmlLinkExtractor(), callback='parse_item', follow=True),)
def __init__(self, domain='WHAT_IM_TRYING_TO_FIND', *args, **kwargs):
super(Spider, self).__init__(*args, **kwargs)
self.domain = domain
self.allowed_domains = [domain]
self.start_urls = [
'http://%s/' % domain,
'http://%s/index.html' % domain,
'http://%s/index.php' % domain,
]
在一个单独的模块中,我尝试了一些方法,比如
from MyModule import Spider
variable = Spider.domain
或者
variable = __import __ ('MyModule').Spider.domain
结果给我带来了
Class 'Spider' has no 'domain' member
如果能给我一些指导,我会非常感激!
Scrapy的文件结构是这样的:
myproject/
__init __.py
items.py
pipelines.py
settings.py
spiders/
__init __.py
spider.py
1 个回答
3
domain
是 Spider 类的实例(也就是具体的对象)所拥有的一个属性,而不是 Spider 类本身的属性。也就是说,只有在你创建了一个 Spider 的实例之后,才能访问 domain
这个属性。