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。谢谢。我根据您的“阅读代码建议”添加了一个解决方案