本文截圖及運行環境均在Win8上實現(是的,我放假回家了,家裏的機器是win8的沒有辦法),但基本步驟與win 7環境基本相同。(應該把~)ps:我後來換了臺win7的電腦,因此這篇文章的環境是win8和win7的結合體~,哇哈哈~,然而這並無什麼卵用~html
scrapy版本爲1.0.3python
這篇文章基本就是很無恥的翻譯了一下官方文檔順便添加了一點本身的理解linux
參考文獻以及下載連接:面試
官方1.0.3英文文檔下載ajax
喜歡的就點推薦+收藏把~這樣我會把我知道的都寫出來的,哇哈哈~shell
我用的操做系統是64位的,可是python用的是32位的,由於32位的包比較全,可是我最近在往64位的服務器上移植,到時候有問題我會及時添加的。瀏覽器
首先能夠經過如下命令來查看全部scrapy可用的命令類型:服務器
scrapy -h
scrapy目前的命令能夠分爲項目命令和全局命令兩大類,共14種(嗯 ,我認真的數了兩遍),分佈也極其對稱,項目級命令7種全局命令7種(嗯,我又認真的數了一遍)。
分別是:網絡
全局命令框架
startproject
settings
runspider
shell
fetch
view
version
項目命令
crawl
check
list
edit
parse
genspider
bench
哇哈哈,然咱們接着開始一一學習一下這些命令吧,有些命令好用的不要不要的哦~
基本語法:scrapy startproject <project_name>
是否須要項目存在:固然是不須要咯~
其實這個命令咱們在以前的教程當中也用過了,應該不陌生,就是在建立一個名爲project_name
的爬蟲框架,供咱們調教(猥瑣臉)。是建立爬蟲項目開天闢地的第一步喲~。
用例
scrapy startproject njupt #嗯,我無恥的修改了官方的例子,在運行命令行的目錄下面建立了一個名爲njupt的文件夾,裏面存放了一個名爲njupt的scrapy框架
基本語法:scrapy settings [options]
是否須要項目存在:固然是不須要咯~(這是官方寫的,貌似有點問題)
嘛這個命令是用來查看項目參數的。官方文檔說不須要項目,通過本人測試,若是在項目目錄下,就會顯示出項目的settings.py
裏面對應的項目的內容,若是實在項目目錄以外,貌似會返回一個scrapy的默認值,我我的建議你們在項目目錄下使用這個命令來查看settings.py
裏面的內容就ok了。
用例
scrapy settings --get BOT_NAME
基本語法:scrapy runspider <spider_file.py>
是否須要項目存在:固然是不須要咯~
貌似這個命令是不依託一個scrapy
項目而直接運行一個爬蟲的命令。弱弱的說一句,這種沒有settings
沒有pipelines
的爬蟲真的好麼
用例
scrapy runspider njupt.py
基本語法:scrapy shell [url]
是否須要項目存在:固然是不須要咯~
這個命令真的很重要啦~,主要目的是建立一個shell環境用於調試response的命令(嗯,和標題如出一轍),由於她過重要了,因此我臨時決定回來專門寫一篇文章來介紹這個命令,火燒眉毛的同窗去翻官方文檔吧~(其實我是累了,由於我一邊碼字一遍在重裝電腦並且如今也半夜十二點多了~說好的早睡又泡湯的)
用例:
scrapy shell http://www.njupt.edu.cn
基本語法:scrapy fetch [url]
是否須要項目存在:貌似有沒有都行
這個命令實際上是在標準輸出中顯示調用一個爬蟲來爬取指定的url的全過程。
要注意的一點是,若是是在一個項目目錄下使用這個命令則會默認調用這個項目當中的爬蟲,若是在項目目錄以外使用這個命令,則會調用scrapy默認的爬蟲來爬取。因此有沒有項目存在都能運行。
用例:
scrapy fetch http://www.njupt.edu.cn #會顯示抓取的過程,以及抓取的html的內容
scrapy fetch --nolog --headers http://www.njupt.edu.com/ #能夠添加一些參數來,觀察各類信息,如添加個: --nolog 能夠忽略不少煩人的日誌 --headers 用來查看請求時的頭部信息
基本語法:scrapy view [url]
是否須要項目存在:無需項目存在
當你對於某些信息死也提取不出來的時候就要考慮使用一下使用這個view
了,這個命令是給你下載一個頁面並用瀏覽器打開,目的是讓你對比一下scrapy"看到"的頁面和你經過瀏覽器看到的頁面有什麼不一樣,這個對於某些動態生成的網頁頗有做用!可是這裏有個坑你們注意一下,我在Win7環境下,使用這個命令的時候在下載對應網頁的同時用瀏覽器打開(目測純命令行無圖形界面的Linux因該不會自動打開瀏覽器),此時裏面的ajax由於有了瀏覽器打開,又被執行了,因此經過瀏覽器打開的頁面應該和你正常訪問的網頁並沒有二致,但並非真正scrapy看到的網頁。如何看到真正的網頁內?很簡單啦,找到原始地址用sublime打開就是啦~。原始地址就在瀏覽器的地址欄裏哦~
用例:
scrapy view http://item.jd.com/1319191.html #嗯,我背叛了大njupt,由於咱們學校的網站太牛X沒有使用ajax,因此我就用大JD作例子了。
基本語法:scrapy version [-v]
是否須要項目存在:無需項目存在
此命令很簡單,就是顯示scrapy的版本,若是加上-v
命令則還會顯示Python, Twisted和平臺的信息,貌似對於bug尋找和報告頗有幫助!
基本語法:scrapy genspider [-t template] <name> <domain>
是否須要項目存在:項目命令嘛,果斷須要~
這個命令主要是幫助咱們在編寫多個爬蟲的時候,利用現有爬蟲來快速生成新的爬蟲,固然這不是惟一建立新爬蟲的方式,騷年,不嫌累的話能夠本身從新敲一個~
用例:
scrapy genspider -l
經過添加參數-l
來查看現有的爬蟲模板
scrapy genspider -d basic
經過添加參數-d
和模板名稱來查看現有模板的內容,嘛若是實在linux環境下會比較好用,我等在win下面混的菜鳥仍是右鍵用sublime來查看內容吧
scrapy genspider -t basic example example.com
這就是激動人心的生成爬蟲的方式了,經過參數-t
後面緊接着的內容是模板名稱
新爬蟲的名稱
新爬蟲容許爬取的域名
,貌似通常爬蟲名稱基本都是域名主體呢~,聰明的同窗也知道這裏新爬蟲名稱
新爬蟲容許爬取的域名
分別對應的就是以前上一篇教程提到的name
和allowed_domains
這兩個參數咯。
基本語法: scrapy crawl <spider>
是否須要項目存在:項目命令嘛,果斷須要~
這個命令是很激動人心的,每次寫完爬蟲就火燒眉毛的一試,你們在上篇教程中想必也已經實驗過了。不過貌似一次只能跑一個爬蟲,想運行多個爬蟲怎麼辦呢?我如今想到的兩個解決方案
1.本身寫一個bat或者shell腳本
2.本身添加一個scrapy的shell命令(沒錯,聽起來屌飛了,我會在之後的教程中告訴你怎麼作的,想看的之後的教程,哼哼~,我纔不會請你點推薦加收藏呢~)
用例:
scrapy crawl njupt #咩哈哈,啓動njupt爬蟲吧騷年~
基本語法: scrapy check [-l] <spider>
是否須要項目存在:項目命令嘛,果斷須要~
這個命令官方寫的是Contect檢查而後就沒了,我在win7下面試了一下,能檢查出一部分錯誤,可是後面加一個-l
參數貌似沒什麼用啊,沒有顯示出官方文檔例子裏面的spider列表和函數列表,卻是有一堆warning
,我回來研究研究一下源碼看看把,這個命令目前就是檢查一些語法、import
和warning
等錯誤,邏輯錯誤確定是查不出來的啦~
用例:
scrapy check njupt
基本語法: scrapy list
是否須要項目存在:項目命令嘛,果斷須要~
這個命令就是查看一下這個項目裏面目前有哪些爬蟲~,寫了不少的爬蟲以後打這個命令有一種閱兵的快感呢~,通常linux環境下使用較多~
用例:
scrapy list
基本語法: scrapy edit <spider>
是否須要項目存在:項目命令嘛,果斷須要~
典型的在linux裏面用的高大上命令啊,輸入此命令能夠馬上調取settings.py
中的editor
指定的編輯器來打開爬蟲進行編輯(是的,settings.py
裏面還能配這麼屌的參數我也很震驚)。順便說一句個人win7系統運行以後直接報錯...傷心啊
用例:
scrapy edit njupt
基本語法: scrapy parse <url> [options]
是否須要項目存在:項目命令嘛,果斷須要~
這方法適合測試本身寫的spider和後續各類組建如:pipeline
等組合使用的狀況,我通常用來測試本身編寫的spider(在沒有見過這個命令以前我一直是用crawl
命令來測試的...悲劇啊)。
支持的參數卻是蠻豐富的:
--spider=SPIDER
: 沒有指定spider的狀況下其程序搜索,用這個選項能夠強行指定某個spider
--a NAME=VALUE
: 用來設定spider須要的參數,能夠多個
--callback
或-c
: 指定spider裏面用於處理response
的函數,沒有強行制定的話,默認使用parse
函數
--pipelines
:用來指定後續的pipelines
,能夠靈活定製哦~
--rules
或-r
: 經過CrawlSpider
設定的規則來選取對應的函數看成解析response
的回調函數
--noitems
: 不顯示抓取的items
--nolinks
: 不顯示提取的連接
--nocolour
: 輸出的結果不要高亮顯示(這個選項仍是不要用得好)
--depth
或-d
: 設置爬取深度,默認爲1哦~
--verbose
或-v
: 顯示被爬取的每層的相關信息
用列:
scrapy parse http://www.njupt.edu.cn
基本語法: scrapy bench
是否須要項目存在:不須要
這個命令我我的理解就是對你的硬件作一個爬蟲的壓力測試,看看不考慮網絡的狀況下你的硬件究竟能將這個爬蟲運行的多快。固然這個有點理論速度的味道,實際上你爬起來不可能這個麼快。姑且算是告訴你硬件的瓶頸的方法吧。不過我win7上運行了貌似沒有什麼用,沒有出現官方說好的各類參數,回來有空還要仔細研究一下啊。
用例:
scrapy bench
我終於寫完了,喜歡的就收藏+推薦一下吧,這樣我就會更有動力寫新的教程了,哇哈哈~