在編寫scrapy爬蟲的時候,我們很煩每次都是要自己創建一個新的的spider,當然創建完項目的時候開業再次執行 scrapy genspider name “name” 來創建一個name.py文件,如圖:
現在來簡單介紹一下這個命令是如何創建一個spider文件的,先仔細觀察一下上面的類命名和函數命名。所有scrapy的命令是通過路徑:X:\Python35\Lib\site-packages\scrapy\commands來執行的,先看看我們的genspider命令,在路徑下找到genspider.py文件,如圖:
仔細觀察不難發現這個函數通過os.path.join方法組建一個完整的scrapy路徑,這里演示一下:
在看看倒數第二個函數:
仔細觀察發現它是os.listdir列出templates\spiders文件夾下的所有的文件和文件夾,去尋找擴展名為.tmpl的文件,看到這里聰明的你肯定知道了,沒錯我們去也去需要這個文件.tmpl,路徑:D:\Python35\Lib\site-packages\scrapy\templates\spiders下看到如圖:
記事本、sublime打開看到這樣的情況:
對比上面說的內容,可以知道$classname是獲取項目名稱來創建類名,以此類推就不難知道了,現在我們可以修改這個文件(想對比最開始執行scrapy genspider name “name”),我們在最上面添加一行:from scrapy.spiders import Request。再次執行scrapy genspider name “name”看看結果:
現在介紹第二種情況:每次執行完scrapy crawl name 在項目的spiders文件夾下只是生成了一個__init__.py文件,那么我們每次都是要自己去新建一個spider文件來寫爬蟲,最好是執行生成項目的時候spider文件也生成好了,還像上面一樣也寫好了部分內容的文件,這里有兩種方法
一、先看看路徑:D:\Python35\Lib\site-packages\scrapy\templates\project
確定是和項目文件的文件個數和名字一樣的,那么在上圖的spiders文件夾下的__init__.py添加內容項目文件的__init__.py也是對應上相同的內容(自行操作),那么在spiders這個地方添加一個.py文件,并且添加內容,對應的在項目的文件內spiders文件夾下也會自動新建一個一模一樣的.py文件
二、自動新建一個和項目文件名一樣的spider,并且類名也是和項目名稱一樣聯系起來。
上面的方法發現有個缺陷,就是項目里面的spiders文件夾下的spider.py只能叫做spider 內容也是和自己在上面加的一樣,類名完全千篇一律,最好是和項目名稱以前變化,有點像項目里面的items.py的類名稱(自己去看看),可以看看items.py的模板文件(items.py.tmpl)
我們的項目的spiders文件夾下也應該這樣變化還要添加內容,這里直接給出。查看路徑X:\Python35\Lib\site-packages\scrapy\utils下的template.py文件:
路徑作為參數傳遞進來,判斷是不是.tmpl擴展名文件,而這個路徑同樣我們去:X:\Python35\Lib\site-packages\scrapy\commands下查找startproject.py文件,在內容最下面也是一個函數來組建一個完整的scrapy路徑(os.path.join)
而如何傳遞給templates里面的函數呢,同樣看上面這個圖的文件的最頂上:
既然這樣給出了spiders文件夾下的spider.py.tmpl,那么在這個這一級模板文件夾下也也應該給出這個一樣文件(名字也是一模一樣)放在這里:X:\Python35\Lib\site-packages\scrapy\templates\project\module\spiders
修改spider.py.tmpl文件如下:
我們執行scrapy startproject mycustomtemplates:
后面還有可以自定義很多,大家一起共勉,博主屬于新手,哪里不對的地方還請指點,見諒。