我是Python的新手,并且已经与Scrapy一起使用它来制作一些网络抓取工具。当从终端运行蜘蛛时,我可以使用" -a NAME = VALUE"设置参数,这对于将其指向不同的域特别有用。我正在尝试使用"域"参数作为另一个模块中的变量但被卡住了。这是我尝试从以下位置导入参数的模块的一部分:
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
答案 0 :(得分:3)
domain
是Spider实例的属性,而不是Spider类的实例。如果您在某处创建了domain
的实例,则只能访问Spider
。