Python3爬蟲Scrapy框架常用命令

目錄

 

全局命令

fetch命令

runspider命令

settings命令

shell命令

startproject命令

version命令

 view命令

項目命令

Bench命令

Genspider命令

Check命令

Crawl命令

List命令

 Edit命令

 Parse命令


全局命令

  •   bench         Run quick benchmark test
  •   fetch         Fetch a URL using the Scrapy downloader
  •   genspider     Generate new spider using pre-defined templates
  •   runspider     Run a self-contained spider (without creating a project)
  •   settings      Get settings values
  •   shell         Interactive scraping console
  •   startproject  Create new project
  •   version       Print Scrapy version
  •   view          Open URL in browser, as seen by Scrapy

fetch命令

fetch命令主要用來顯示爬蟲爬取的過程。
比如,我們可以通過scrapy fetch 網址”的形式顯示出爬取對應網址的過程,從顯示爬蟲爬取百度首頁(http://www.baidu.com) 的過程爲例,如下所示。

此時,如果在Scrapy項目目錄之外使用該命令,則會調用Scrapy默認的爬蟲來進行網頁的爬取。如果在Scrapy的某個項目目錄內使用該命令,則會調用該項目中的爬蟲來進行網頁的爬取。
我們在使用fetch命令的時候,同樣可以使用某些參數進行相應的控制。
可以通過scrapy fetch -h列出所有可以使用的fetch相關參數。
比如,我們可以通過-headers參數來控制顯示對應的爬蟲爬取網頁時候的頭信息,也可以通過-nolog參數來控制不顯示日誌信息,同時,還可以通過--spider-SPIDER參數來控制使用哪個爬蟲,通過-logfile=FILE參數來指定存儲日誌信息的文件,通過-loglevel-LEVEL
參數來控制日誌等級。
如下所示,我們分別通過--headers參數和--nolog參數控制了展現爬蟲爬取新浪新聞首頁(ttp://news.sina.com.cn/)時候的頭信息並且不顯示日誌信息。

runspider命令

通過Scrapy中的runspider命令我們可以實現不依託Scrapy的爬蟲項目,直接運行一個爬蟲文件。
下面我們將展示一個運用ruspioler命令運行爬出文件的例子,首先編寫一個Scrapy爬蟲文件,如下所示。

from scrapy.spiders import Spider

class FirstSpider(Spider):
    name = 'first'
    allowed_domains = ['baidu.com']
    start_urls = ['https://www.baidu.com',]

    def parse(self, response):
        pass

在此,僅需要簡單瞭解該爬蟲文件即可,因爲在後面我們會詳細學習如何編寫爬蟲文件。首先,定義該爬蟲文件的名字爲first,同時,定義爬取的起始網址爲htp://www.baidu.com。
然後,可以使用runspider命令直接運行該爬蟲文件,此時,並不需要依託一個完整的Scrapy項目去運行,只需要擁有對應的爬蟲文件即可。
如下所示,我們通過scrapy runspider運行了該爬蟲文件,並將日誌等級設置成了INFO。

可以看到,通過該指令在不依靠Scrapy項目的情況下最終成功完成了該爬蟲文件的運行。

settings命令

我們可以通過Scrapy中的settings 命令查看Scrapy 對應的配置信息。
如果在Scrapy項目目錄內使用sttings命令,查看的是對應項目的配置信息,如果在Scrapy項目目錄外使用settings命令,查看的是Scrapy默認配置信息。

shell命令

通過shell命令可以啓動Scrapy的交互終端(Scrapy shell)。
Scrapy的交互終端經常在開發以及調試的時候用到,使用Scrapy的交互終端可以實現在不啓動Scrapy爬蟲的情況下,對網站響應進行調試,同樣,在該交互終端中,我們也可以寫一些Python代碼進行相應測試。
比如,可以使用shell命令,爲爬取百度首頁創建一個交互終端環境,並設置爲不輸出日誌信息,如下所示:
 

 可以看到,在執行了該命令之後,會出現可以使用的Scrapy對象及快捷命令,比如item、response、settings、 spider 等,並進入交互模式,在“>>>”後可以輸人交互命令及相應的代碼。
在該交互模式中,可以提取出爬取到的網頁的標題,此時我們通過XPath表達式進行提取,可能讀者此時並不熟悉XPath表達式,我們將會在後面進行XPath表達式的基礎講解,在此,僅需要簡單知道下面的XPath表達式“/html/head/title"的意思是:提取該網頁<html)> 標籤下的<head>標籤中<title>標籤對應的信息。我們知道,此時該標籤中的信息即爲該網頁的標題信息,所以,下面的XPath表達式“/htm/headtitle”目的就是提取爬取到的網頁的標題信息。
如下所示,我們通過sel.xpath對對應信息進行了提取,並且通過Python代碼輸出了提的信息。

>>> ti=sel. xpath(" /html /head/title")
>>> print (ti)
[<selector xpath=' /html /head/title' data='<title>百度一下,你就知道</tit1e>'>]
>>>
可以看到,data後的內容就是提取到的數據,成功將百度首頁的標題“<title> 百度一下,你就知道</title>" 進行了提取。
除此之外,在交互終端中我們還可以進行各種開發調試。
如果我們要退出該交互終端,可以使用exit()實現,如下所示:
>>> exit()
D: \Python35 \myweb\part12>
以上我們分析了Scrapy中的shell命令如何使用,學會使用shell命令,在一定程度 上可以大大方便爬蟲的開發與調試,因爲通過shell命令,我們可以不創建Scrapy項目就直接對爬蟲進行開發和調試。

startproject命令

startproject命令.上-節已經詳細分析過,主要用於創建項目。

version命令

通過version命令,可以直接顯示Scrapy的版本相關信息。
比如,如果要查看Scrapy 的版本信息,可以通過以下代碼實現:

如果還想查看與Scrapy相關的其他版本信息(當然包含上述的Scrapy 版本信息),比如titelptotopltforo的版本的信息,可以在version命令後加上-v參數實現,如下所示:

可以看到,此時已經詳細的展示了與Scrapy相關的版本信息。

 view命令

通過view命令,我們可以實現下載某個網頁並用瀏覽器查看的功能。
比如,我們可以通過如下命令下載網易新聞首頁( http://www.baidu.com/),並自動用瀏覽器查看下載的網頁。
(venv) D:\pycharmproject\pythonlearning>scrapy view http://www.baidu.com/
執行該命令後,會自動打開瀏覽器並展示已下載到本地的頁面(注意觀察,由於網頁已下載到本地,所以此時的網址是本地的網頁地址),如圖12-5所示。

項目命令

接下來,我們詳細分析Scrapy項目命令的使用。
由於Scrapy項目命令需要基於Scrapy爬蟲項目纔可以使用,所以我們首先任意進入一個已經創建的Scrapy爬蟲項目,如下所示。
 

(venv) D:\pycharmproject\pythonlearning>cd myfirstpjt

 使用scrapy -h來查看在項目中可用的命令。

Available commands:
  bench         Run quick benchmark test
  check         Check spider contracts
  crawl         Run a spider
  edit          Edit spider
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  list          List available spiders
  parse         Parse URL (using its spider) and print the results
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

Bench命令

使用bench命令可以測試本地硬件的性能。
當我們運行scrapy bench的時候,會創建一個本地服務器並且會以最大的速度爬行,在爲了測試本地硬件的性能,避免其他過多因素的影響,所以僅進行鏈接跟進,不進行內容處理。
如下所示,我們使用了scrapy bench對本地硬件的性能進行了測試。
 

可以看到,在得到的測試結果中,單純就硬件性能來說,顯示每分鐘大約能爬幾千個網頁。這只是一個參考標準,在實際運行爬蟲項目的時候,會由於各種因素導致速度不同,一般來說, 可以根據實際運行的速度與該參考速度進行對比結果,從而對爬蟲項目進行優化與改進。

Genspider命令

可以使用genspider命令來創建Scrapy爬蟲文件,這是一種快速創建爬蟲文件的方式。使用該命令可以基於現有的爬蟲模板直接生成一 個新的爬蟲文件,非常方便。同樣,需要在Scrapy爬蟲項目目錄中,才能使用該命令。
可以用該命令的-l參數來查看當前可以使用的爬蟲模板,如下所示。

可以看到,當前可以使用的爬蟲模板有basic、crawl、 csvfeed、 xmlfeed。
此時,可以基於其中的任意一個爬蟲模板來生成一個爬蟲文件,比如,我們可以使用basic模板生成-一個爬蟲文件, 格式爲“scrapy genspider -t模板新爬蟲名新爬蟲爬取的域名”,如下所示。
 

Check命令

爬蟲的測試比較麻煩,所以在Scrapy中使用合同(contract9) 的方式對爬蟲進行測試。
使用Scrapy中的check命令,可以實現對某個爬蟲文件進行合同(contract)檢查。
比如要對剛纔基於模板創建的爬蟲文件weisuen.py進行合同( contract)檢查,我們可以用“scrapy check爬蟲名”實現,注意此時“check" 後面的是爬蟲名,不是爬蟲文件名,所以是沒有後綴的,如下所示。

可以看到,此時該爬蟲文件的合同檢查通過,顯示的結果爲“OK"。

Crawl命令

可以通過crawl命令來啓動某個爬蟲,啓動格式是“ scrapy crawl爬蟲名”。
需要注意的是,crawl 後面跟的是爬蟲名,而不是爬蟲項目名。

List命令

通過Scrapy中的list命令,可以列出當前可使用的爬蟲文件。
比如,我們可以在命令行中進人爬蟲項目myfirstpjit所在的目錄,然後使用scrapy list直接列出當前可以使用的爬蟲文件,如下所示。

可以看到,此時可以使用的爬蟲文件有一個,first。

 Edit命令

通過Scrapy中的edit命令,我們可以直接打開對應編輯器對爬蟲文件進行編輯,該命令在Windows中執行會出現一點問題,而且在Windows中,我們一般會使用Python IDE (比如PyCharm)直接對爬蟲項目進行管理和編輯,但是該命令在Linux中是很方便的。

 Parse命令

通過parse命令,我們可以實現獲取指定的URL網址,並使用對應的爬蟲文件進行處理和分析。
比如,我們可以使用“scrapy parse http://www.baidu.com "獲取百度首頁( htp://www.baidu.com),由於在這裏沒有指定爬蟲文件,也沒有
指定處理函數,所以此時會使用默認的爬蟲文件和默認的處理函數,進行相應的處理,如下所示。

“scrapy parse”命令擁有很多參數,具體有哪些參數我們可以通過scrapy parse -h來查看,如下所示。

Options
=======
--help, -h              show this help message and exit
--spider=SPIDER         use this spider without looking for one
-a NAME=VALUE           set spider argument (may be repeated)
--pipelines             process items through pipelines
--nolinks               don't show links to follow (extracted requests)
--noitems               don't show scraped items
--nocolour              avoid using pygments to colorize the output
--rules, -r             use CrawlSpider rules to discover the callback
--callback=CALLBACK, -c CALLBACK
                        use this callback for parsing, instead looking for a
                        callback
--meta=META, -m META    inject extra meta into the Request, it must be a valid
                        raw json string
--cbkwargs=CBKWARGS     inject extra callback kwargs into the Request, it must
                        be a valid raw json string
--depth=DEPTH, -d DEPTH
                        maximum depth for parsing requests [default: 1]
--verbose, -v           print each depth level one by one

Global Options
--------------
--logfile=FILE          log file. if omitted stderr will be used
--loglevel=LEVEL, -L LEVEL
                        log level (default: DEBUG)
--nolog                 disable logging completely
--profile=FILE          write python cProfile stats to FILE
--pidfile=FILE          write process ID to FILE
--set=NAME=VALUE, -s NAME=VALUE
                        set/override setting (may be repeated)
--pdb                   enable pdb on failure
 

可以看到,這些參數大致分爲兩類:普通參數( Options)和全局參數( Global Options),全局參數我們在其他命令中基本上已經看過,所以在這裏我們主要關注該命令對應的參數(Options)。
下面歸納了常用的參數及其含義,如表12-2所示。

通計上方的表格可以很清晰地知道narse命今中有哪此常見的參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章