一. scrapy 是怎么运行起来的
- 查找scrapy.cfg文件
- 解析scrapy.cfg文件
-
读取cfg对象中scrapy.cfg中的settings属性(settings文件的路径)加入环境变量中作为 SCRAPY_SETTINGS_MODULE 的值
-
加载默认配置文件default_settings.py 生成settings实例,然后用自定义的settings.py文件覆盖默认设置
-
检查运行环境是否在项目中,就近查找
scrapy.cfg文件来确定是否在项目环境中 -
组装命令实例集合
-
解析命令参数
-
初始化 CrawlerProcess实例
- 获取爬虫类加载器 (读取配置文件中的SPIDER_MANAGER_CLASS配置项,在默认配置文件default_settings.py中)
- SPIDER_MANAGER_CLASS = spiderloader.SpiderLoader;这个类是用来加载我们编写好的爬虫类的;
- 配置文件获取存放爬虫脚本的路径,加载所有爬虫,组装成{spider_name: spider_cls}的字典,将所有的属性封装到 CrawlerProcess对象中,将CrawlerProcess对象作为cmd的属性,
- 调用 CrawlerProcess 的 crawl 方法
- 创建 crawler 实例,其中包含了 自己编写的爬虫解析类
- 调用 crawler 实例的 crawl 方法
到此 爬虫类创建一个实例对象,然后创建引擎,之后调用爬虫类的
start_requests方法获取种子 URL,最后交给引擎执行
- 调用 CrawlerProcess 的 start 方法,里面通过 reactor,
Twisted模块的事件管理器,我们只要把需要执行的事件注册到reactor中,然后调用它的run方法,它就会帮我们执行注册好的事件,如果遇到网络IO等待,它会自动帮切换到可执行的事件上,非常高效
- Twisted 待补充