請問scrapy源碼的入口是哪個?

就比如執行 scrapy crawl test 的話,引擎會從哪一步開始,哪一個模塊開始 。也是第一次看開源框架的源碼,看的有點吃力,所以來這裡找大牛取下經


當你運行 scrapy command arg 這樣的命令時,這裡的 scrapy 實質是一個 python 腳本,它接受參數,首先調用 scrapy/cmdline.py 中的 execute() 函數. 在 scrapy 安裝目錄下的 cmdline.py 文件中:

...
def execute(argv=None, settings=None):
if argv is None:
argv = sys.argv
...
if settings is None:
settings = get_project_settings()
check_deprecated_settings(settings)
...
inproject = inside_project()
cmds = _get_commands_dict(settings, inproject)
...
cmd.crawler_process = CrawlerProcess(settings)
...
...
if __name__ == "__main__":
execute()

上面的代碼主要做了這麼幾件事:

  1. 讀取scrapy.cfg配置文件
  2. 讀取settings設置文件
  3. 導入相應的module爬蟲模塊(inside_project)
  4. 解析命令行參數(cmds:為相應的Scrapy Command對象列表)

作為整個程序的入口,其主要做的事情是解析用戶爬蟲的配置屬性,根據傳遞的命令行參數,調用對應的代碼來執行相應的任務.
scrapy command arg 中 command 可以為 crawl / startproject / genspider / runspider / deploy / …等命令,每一個命令在 scrapy/commands 文件夾下都有對應 command類.
對於 scrapy crawl test ,就會調用 commands/crawl.py 中的方法去執行相應的爬蟲任務


推薦閱讀:

TAG:Python | 爬蟲計算機網路 | scrapy |