scrapy源码_study_01

155 阅读1分钟

一. scrapy 是怎么运行起来的

  1. 查找scrapy.cfg文件

image.png

  1. 解析scrapy.cfg文件

image.png

  1. 读取cfg对象中scrapy.cfg中的settings属性(settings文件的路径)加入环境变量中作为 SCRAPY_SETTINGS_MODULE 的值

  2. 加载默认配置文件default_settings.py 生成settings实例,然后用自定义的settings.py文件覆盖默认设置

image.png

  1. 检查运行环境是否在项目中,就近查找 scrapy.cfg 文件来确定是否在项目环境中

  2. 组装命令实例集合

image.png

  1. 解析命令参数

  2. 初始化 CrawlerProcess实例

  • 获取爬虫类加载器 (读取配置文件中的SPIDER_MANAGER_CLASS配置项,在默认配置文件default_settings.py中)
  • SPIDER_MANAGER_CLASS = spiderloader.SpiderLoader;这个类是用来加载我们编写好的爬虫类的;
  • 配置文件获取存放爬虫脚本的路径,加载所有爬虫,组装成{spider_name: spider_cls}的字典,将所有的属性封装到 CrawlerProcess对象中,将CrawlerProcess对象作为cmd的属性,

image.png

  1. 调用 CrawlerProcess 的 crawl 方法

image.png

  • 创建 crawler 实例,其中包含了 自己编写的爬虫解析类

image.png

  • 调用 crawler 实例的 crawl 方法

image.png

到此 爬虫类创建一个实例对象,然后创建引擎,之后调用爬虫类的 start_requests 方法获取种子 URL,最后交给引擎执行

  1. 调用 CrawlerProcess 的 start 方法,里面通过 reactor,Twisted 模块的事件管理器,我们只要把需要执行的事件注册到 reactor 中,然后调用它的 run 方法,它就会帮我们执行注册好的事件,如果遇到网络IO等待,它会自动帮切换到可执行的事件上,非常高效
  • Twisted 待补充

参考 juejin.cn/post/689777…