从源码开始学习Scrapy系列07-genspider指令

前言

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

获取模板文件

扫描二维码关注公众号,回复: 937792 查看本文章

template_file = self._find_template(opts.template)

初始化爬虫模块,生成代码

self._genspider(module, name, domain, opts.template, template_file)


到这里基本就结束了,GG


猜你喜欢

转载自blog.csdn.net/wang1472jian1110/article/details/80364426