从源码开始学习Scrapy系列03-bench指令及指令运行机制

本文从源码层面详细介绍了Scrapy的bench指令及其运行机制,包括配置加载、指令判断、设置覆盖、选项解析等步骤。通过调试发现,bench指令启动了一个监听在8998端口的服务器,用于进行爬虫性能测试。benchSpider作为测试爬虫,评估下载速度、日志量等指标。完整源码解析可在作者的GitHub项目中查看。
摘要由CSDN通过智能技术生成

代码调试

接着上一章节,在cmdline模块中的main方法中或者直接在__main__模块中的main方法中,改成如下代码:

if __name__ == '__main__':
    execute(['scrapy','bench'])

并在此方法处下断点,随后继续debug模式调试

1.获取项目配置

if settings is None:
    settings = get_project_settings()
    # set EDITOR from environment if available
    try:
        editor = os.environ['EDITOR']
    except KeyError: pass
    else:
        settings['EDITOR'] = editor

(读取系统默认的default_settings配置文件,并存储到内存中

读取项目的cfg文件,通过读取cfg的[settings]选项下的default属性,获取项目的配置文件,并将重复配置覆盖之前内存中的default_settings配置

['/etc/scrapy.cfg', 'c:\\scrapy\\scrapy.cfg', '/home/wangsir/.config/scrapy.cfg', '/home/wangsir/.scrapy.cfg']

['/etc/scrapy.cfg', 'c:\\scrapy\\scrapy.cfg', '/home/wangsir/.config/scrapy.cfg', '/home/wangsir/.scrapy.cfg', '/home/wangsir/code/sourceWorkSpace/scrapy/scrapy.cfg'])

2.通过以下方法查看你当前执行命令的位置是否在一个scrapy项目内

inproject = inside_project()

(通过对比每个指令类的requires_project属性,完成是否可以显示该指令或者说该指令是否可用的判定,这也就是为什么有的指令没有显示在scrapy -help中)

3.获取命令字典

cmds = _get_commands_dict(settings, inproject)

4.返回当前命令名字(key=命令:value=实例对象)

cmdname = _pop_command_name(argv)

5.初始化一个指令解析对象

parser = optparse.OptionParser(formatter=optparse.TitledHelpFormatter(), \
    conflict_handler='resolve')

6.指令判定

if not cmdname:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值