scrapy系列(二)——startproject、genspider創建項目與模板使用


閱讀本文之前需要安裝scrapy,如果你還沒有安裝該框架,那么可以看之前一篇文章scrapy1.2windows安裝

現在默認大家都已經成功的安裝了scrapy可以開始大展身手了。本文主要講的是新建項目,有人說了,網上那么多的新建項目介紹,也就一條命令的事,你也好意思單拉出一章來講?在這里我講的是大家可能沒有注意的事項,希望大家還是看一看的好。

還是老規矩先上官網上的文檔介紹:

文檔中可以看到新建項目的時候只需要輸入一條簡單的指令scrapy startproject projectName。如果成功創建項目的話那么控制台會返回:

相信有經驗的人經常看到這條信息吧,我們可以看到第一行信息:使用模板創建項目。這也是本文主要講的內容--模板。

 先來看看源碼中相關代碼:

創建項目時會執行run方法,首先判斷startproject后面是不是只有一個參數,然后判斷項目名稱是否符合語法規則,這都不是重點,掃一眼就過去不用太在意。后面就是根據模板來創建項目的主要代碼了,那么模板路徑是什么呢?在方法templates_dir中就有介紹了。從代碼中可以看到,_templates_base_dir的值應該是從settings中獲取,如果該值為空,那么它就是scrapy的path與templates拼接成的路徑。而settings中的TEMPLATES_DIR對應的值也是or后面的路徑值,如下圖所示:然后scrapy將會根據路徑值來創建項目相關文件。

那么我們知道這個鬼東西有什么用呢?僅僅是和同道吹牛嗎?

個人覺得這個東西還是挺有作用的。首先目前創建的項目路徑中settings.py如下圖所示:

文件中ROBOTSTXT_OBEY的值為True,意思是遵守robots協議,那么很多網站就沒法搞了,比如百度之類的,所以就要修改該值。如果我們需要創建大量的項目難道還要一個個的修改嗎?所以可以在模板中修改,將其值改為False,那么以后我們創建的項目里的settings.py文件ROBOTSTXT_OBEY值都是False了。我們還可以向settings.py.tmpl模板文件中填充一些我們需要用到的值,比如default_settings.py文件中默認的settings鍵值對,這樣每次使用的時候就不會在自己項目的settings.py找不到相關的鍵值了。處理一類的項目比如采集各種新聞網站,我們需要采集的字段都一樣,也就是item一樣,那么我們的items.py和pipelines.py文件就可以用模板構建,這樣就不用每次都要自己手寫了。我們還可以在里面構造自己的模板文件,但是這樣就需要修改startproject.py源碼文件中的TEMPLATES_TO_RENDER值。有興趣的小伙伴可以自己動手試試。

使用模板可以為我們處理大量相似項目的新建提供極大的便利。現在項目已經按照你的預期進行創建了,我們可以開始下一步發行動了,創建spider。

我剛開始用scrapy的時候,創建spider都是一個個復制的,復制以后挨個修改,有時候稍微漏了一兩處地方都會帶來一些問題。要是純手寫的話,出錯的幾率比復制spider還大。后來看文檔才發現scrapy提供了命令讓我們可以根據模板創建spider,使用的命令是genspider。這個命令就不帶着大家看源碼了, 有興趣的小伙伴可以自己看看。想查看該命令的用法可以在命令行中輸入scrapy genspider, 可以看到如下信息:

scrapy genspider -l 可以輸出所有可用模板信息。如果你想知道一種模板,比如crawl里面是什么內容的時候,可以使用命令scrapy genspider -d template (crawl)。等你對幾個模板熟悉以后就可以使用scrapy genspider (-t template 括號內可省略,省略的話默認使用basic模板) name domain創建spider。注意這里的name不能使用project的name, 也不能使用已存在的spider的name,不然報錯。如果你想覆蓋以前的spider , 可以在genspider后加--force參數, 后面的name是被覆蓋spider的name。我們還可以為框架添加自己設計的模板,模板的位置在上面提到的TEMPLATES_DIR路徑下的templates\spiders文件夾中。可以在spider模板中增加自己常用的方法,也可以設計一個簡單的類框架,以適應你所需要采集的頁面規則。

如果修改了TEMPLATES_DIR的值來使用自己構建的模板的話,那么spider和project模板都需要構建,不然會找不到模板報錯。

希望這期的模板能給大家帶來點作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM