Python Scrapy是如何通过名称找到Spider类的?

Python Scrapy是如何通过名称找到Spider类的?,python,scrapy,Python,Scrapy,假设我有一只蜘蛛: class SomeSPider(Spider): name ='spname' 然后我可以通过创建一个新的SomeSpider实例来抓取我的爬行器,并像这样调用爬行器,例如: spider= SomeSpider() crawler = Crawler(settings) crawler.configure() crawler.crawl(spider) .... 我能用蜘蛛的名字做同样的事情吗?我是说“spname” crawler.crawl('spnam

假设我有一只蜘蛛:

class SomeSPider(Spider):
     name ='spname'
然后我可以通过创建一个新的SomeSpider实例来抓取我的爬行器,并像这样调用爬行器,例如:

spider= SomeSpider()
crawler = Crawler(settings)
crawler.configure()
crawler.crawl(spider)
....
我能用蜘蛛的名字做同样的事情吗?我是说“spname”

crawler.crawl('spname') ## I give just the spider name here
如何动态创建Spider? 我猜scrapy经理会在内部进行,因为这很好:

Scrapy crawl spname   
一个解决方案是解析我的spider文件夹,获取所有spider类并使用name属性过滤它们?但这似乎是一个牵强的解决方案


提前感谢您的帮助

请看一下源代码:

# scrapy/commands/crawl.py

class Command(ScrapyCommand):

    def run(self, args, opts):
        ...



请看一下源代码:

# scrapy/commands/crawl.py

class Command(ScrapyCommand):

    def run(self, args, opts):
        ...



受@kev answer的启发,这里有一个检查spider类的函数:

from scrapy.utils.misc import walk_modules
from scrapy.utils.spider import iter_spider_classes

def _load_spiders(module='spiders.SomeSpider'):
    for module in walk_modules(module):
        for spcls in iter_spider_classes(module):
            self._spiders[spcls.name] = spcls
然后您可以实例化:

somespider = self._spiders['spname']()

受@kev answer的启发,这里有一个检查spider类的函数:

from scrapy.utils.misc import walk_modules
from scrapy.utils.spider import iter_spider_classes

def _load_spiders(module='spiders.SomeSpider'):
    for module in walk_modules(module):
        for spcls in iter_spider_classes(module):
            self._spiders[spcls.name] = spcls
然后您可以实例化:

somespider = self._spiders['spname']()

谢谢我正在查看代码
iter\u spider\u classes(module)
这里我应该给出什么作为“module”变量?这些是
scrapy/utils/misc.py
中的一些帮助函数,用于动态加载obj。谢谢。我根据您的“阅读代码建议”添加了一个解决方案,谢谢!我正在查看代码
iter\u spider\u classes(module)
这里我应该给出什么作为“module”变量?这些是
scrapy/utils/misc.py
中的一些帮助函数,用于动态加载obj。谢谢。我根据您的“阅读代码建议”添加了一个解决方案