(Python) 如何在一个模块中导入 __init__ 的参数以供另一个模块使用?

0 投票
1 回答
559 浏览
提问于 2025-04-18 09:29

我刚开始学习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 这个属性。

撰写回答