初始化乙個scrapy專案時往往是通過startproject 和 genspider兩個命令。
了解scrapy進行命令輸入時的邏輯是怎樣實現的之後,我們可以看看commands資料夾下這兩個命令是如何執行的。
(1) startproject
當我們新建乙個專案時通過scrapy startproject [project_dir] 命令實現。
輸入這一條命令時,首先會對project_name的值進行判斷是否合法;如果有設定project_dir的話會在對應位置新建scrapy.cfg檔案。
當命名和引數沒有問題時,就會通過模板進行複製。
模板檔案在templates資料夾下,所以我們初始化的專案結構就和資料夾下的project的結構一模一樣。
這個地方可以注意一下的就是string.template的用法,之前字串的格式化往往是使用format方法,而這兒通過string.template將原始的模板檔案複製後通過傳入的引數將檔案中的專案名替換為初始化的專案名。
# string.template的用法
import string
source_str = 'my name is $name'
string.template(source_str).substitute(name='chenzilong')
# 這裡就會將$name替換, 輸出 'my name is chenzilong'
在複製檔案初始化結束後,就會輸出一些引導資訊,接下來就是生成乙個spider
(2)genspider
這兒可以注意一下的是子類重寫的父類的add_options方法,之前提到過cmdline.py中對每個cmd物件有繫結自身的各種引數,命令列引數的操作都是通過optparse.optionparser管理的。genspider中重寫的add_options通過設定引數後,在run方法中進行引數的判斷,然後進行對應的操作,生成模板檔案的操作與前面提到的startproject類似。
(3)crawl和runspider
這兩個命令都是執行爬蟲的命令,可以比較一下兩個run方法,就可以看出之間的差別就是runspider通過檔案啟動,匯入檔案為模組,獲取模組下所有spider的子類,取最後乙個載入;crawl後面接上的引數則是spider的名字。抓取的實際行為則是通過crawler_process實現,後面我們將看看crawler_process究竟是什麼和如何實現的。
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
STL vecto初始化(二)
向量 vector 是乙個封裝了動態大小陣列的順序容器 sequence container 跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。容器特性 1.順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...