这是崔斯特的第三十三篇原创文章
开始学习Scrapy
源码 (๑• . •๑)
Scrapy运行命令
一般来说,运行Scrapy项目的写法有,(这里不考虑从脚本运行Scrapy)
|
|
但是更好的写法是,新建一个Python文件,如下,(便于调试)
很容易就发现,Scrapy运行文件是cmdline.py
文件里面的execute()
函数,下面学习下这个函数在做什么。
分析源码
|
|
寻找 scrapy.conf
配置文件,argv直接取sys.argv
|
|
set EDITOR from environment if available
读取settings
设置文件,导入项目,调用get_project_settings()
函数,此处为utils
文件夹下的project.py
文件:
|
|
project.py
init_env()
函数如下:
|
|
conf.py
如注释所说,初始化环境,循环递归找到用户项目中的配置文件settings.py
,并且将其设置到环境变量Scrapy settings module
中。然后修改Python路径,确保能找到项目模块。
|
|
project.py
至此,get_project_settings()
该函数结束,如函数名字一样,最后返回项目配置,到此为止,接着往下看
|
|
导入相应的module爬虫模块(inside_project)
执行环境是否在项目中,主要检查scrapy.cfg配置文件是否存在,读取commands文件夹,把所有的命令类转换为{cmd_name: cmd_instance}
的字典
|
|
根据命令名称找到对应的命令实例,设置项目配置和级别为command,添加解析规则,解析命令参数,并交由Scrapy命令实例处理。
最后,看看下面这段代码。
|
|
初始化CrawlerProcess
实例,将对应的命令执行,这里是crawl
|
|
看到这,想起了文档中的介绍 Run Scrapy from a script
|
|
所以Scrapy爬虫运行都有用使用到CrawlerProcess
,想要深入了解可以去看看源码 scrapy/scrapy/crawler.py
|
|
最后,附上Scrapy的路径图
总结
简单来说,有这么几步:
- 读取配置文件,应用到爬虫中
- 把所有的命令类转换名称与实例字典
- 初始化
CrawlerProcess
实例,运行爬虫
(看的头疼,好多函数名记不住)
回顾:
- Scrapy源码(1)——爬虫流程概览
- Scrapy源码(2)——爬虫开始的地方