前言
genspider用于生成爬虫,与startproject不同的是,它只是生成爬虫模块文件,而startproject是生成整个scrapy项目。默认使用base模板,使用-l参数可以查看可用的所有模板
Available templates:
basic
crawl
csvfeed
xmlfeed
代码调试
进入genspider模块的run方法
获取爬虫名字,目标域名,并生成模块名
name, domain = args[0:2] module = sanitize_module_name(name)
模块名校验,不能和BOT_NAME的值一样
if self.settings.get('BOT_NAME') == module: print("Cannot create a spider with the same name as your project") return
判断该name的spider是否存在,如果存在并且没有--force选项,则提示已经存在并退出
try: spidercls = self.crawler_process.spider_loader.load(name) except KeyError: pass else: # if spider already exists and not --force then halt if not opts.force: print("Spider %r already exists in module:" % name) print(" %s" % spidercls.__module__) return
获取模板文件
template_file = self._find_template(opts.template)
初始化爬虫模块,生成代码
self._genspider(module, name, domain, opts.template, template_file)
到这里基本就结束了,GG