【一塊兒學爬蟲】scrapy框架的基本使用

回顧

scrapy是一個很是強大的異步爬蟲框架,組件豐富,咱們只須要關注爬蟲的邏輯便可。本文經過一個scrapy項目實戰,來熟悉scrapy的使用css

站點分析

目標站點:scrapy官方提供的抓取網站,主要是名人名言、做者標籤之類的信息 java

網頁結構很是簡單
翻頁url: quotes.toscrape.com/page/5/ 該網站沒有任何的反爬蟲措施,結果也很簡單

流程框架

實現

進入命令行,切換到工程文件夾執行:python

  • scrapy startproject quote_tutorial
  • cd quote_tutorial
  • scrapy genspider quotes quotes.toscrape.com
  • 打開pycharm,會發現以下圖界面

其中一個文件的內容以下:
name:是惟一的標識 parse:用來解析爬取到的頁面 其他文件介紹: 1.配置文件
2.items文件 它實際上是用來保存數據的一個數據結構
3.middlewares文件 它實際上是爬取數據時定義的一些中間件,能夠用來處理request、response和一些exceptions之類的操做,能夠用它來改一些request、response等一些相關的配置 4.piplines文件 管道,用來輸出一些items,主要用作數據清洗、重複的檢查、將數據存儲到數據庫
5.settings 這個文件比較重要,裏面對了不少配置信息。、實際上就是不少的變量

最主要的代碼都會在spider目錄下寫面試

運行

上圖中的quotes是spider的惟一標識符,在以前也有介紹 運行: scrapy crawl quotes 就是執行那麼爲quotes的spider 下圖是截取的另一部分輸出:
另外,咱們該寫下parse方法,該方法會在發起http請求後調用,主要是用來解析頁面:
像以前同樣運行: scrapy crawl quotes 後控制檯就會輸出請求成功後的網頁源碼 parse方法其實回調,在spider調用執行的時候首先會調用上圖中的start_urls請求連接,而後會自動調用parse方法解析網頁

網頁分析和實現

咱們須要的數據有:shell

  • 名言內容
  • 做者
  • 標籤
    先前提過,scrapy中自動生成了不少文件其中有一個名字爲item,這個文件是用來定義存儲網頁數據的數據結構。這個類須要按照需求重寫:主要是指定一些字段,以後就能夠把爬取後的數據按照一個一個的總體保存下來了。item文件的初始化內容以下圖所示:
    上圖中註釋的name字段其實就是示例說明,針對本次爬蟲的需求咱們對該文件進行補充,最後以下圖所示:
    上述就是依舊本次爬蟲需求而定義的存儲數據的數據結構

頁面解析 數據結構定義好以後,咱們須要進行頁面解析也就是parse方法的編寫: 數據庫

本文的parse方法以下圖所示:

scrapy調試 scrapy還提供了一個很是強大的根據:scrapy shell 能夠從terminal輸入:scrapy shell quotes.toscrape.com後面跟的是網址,以後就能夠進入命令行交互模式下面,在這裏進行一些調試 json

以後能夠進行一些調試:
也能夠進行一些選擇器的調試:

修改parse方法後運行 在修改parse方法後再在terminal中執行:scrapy crawl quotes 運行結果圖: 數據結構

翻頁解析

上面已經完成了單個頁面的解析,接下來就剩翻頁問題了。翻頁能夠經過url來請求: quotes.toscrape.com/page/5/ 直接改變url中的頁面數字便可完成翻頁的請求,這個連接能夠從response中獲取: 框架

使用css選擇器便可: next = response.css('.pager .next a::attr(herf)').extract_first() 以後將next轉換爲絕對的url: url = response.urljoin(next) 上面獲得的就是下一頁的絕對url

加上翻頁功能,完整的parse函數以下圖所示: 異步

完成parse函數後,再次執行: scrapy crawl quotes 結果以下:

如何保存結果呢?

scrapy crawl quotes -o quotes.json 在當前目錄下會生成quotes.json文件,文件中就是爬取的數據:

或者

  • scrapy crawl quotes -o quotes.json:可使用json.loads解析
  • scrapy crawl quotes -o quotes.csv
  • *scrapy crawl quotes -o quotes.txt
  • *scrapy crawl quotes -o quotes.xml
  • *scrapy crawl quotes -o quotes.jl:實際上是json line格式:一行一行的存儲
  • 使用 -o輸出結果到文件,經過文件名稱後綴自動判斷文件格式
  • 另外還支持:pickle、marshal等後綴的文件格式
  • 還支持遠程保存:-o ftp://user:pass@ftp.example.com/path/quotes.csv

剩餘工做

保存以前能夠作一些其餘操做,好比:過濾掉一些不合格的item數據。這個功能能夠藉助piplines.py文件完成。該文件的原始內容以下:

這裏咱們只顯示名言的前150個字符,若是名言的長度超過了150,則在後面用**...**替換piplines.py文件最終以下圖所示:

注意:能夠定義多個pipline:好比寫數據庫之類的也可使用pipline實現 pipline定義後須要在setting文件中配置,當前啓用哪幾個pipline

最後,再次執行: scrapy crawl quotes 執行結果代表達到了預期效果:

源碼

上面給出了文章的核心代碼分析,

掃描下方二維碼,發送關鍵詞「scrapy」便可獲取本文的完整源碼和詳細程序註釋

掃碼關注,及時獲取更多精彩內容。(博主今日頭條大數據工程師)

公衆號專一:互聯網求職面經javapython爬蟲大數據等技術、海量資料分享:公衆號後臺回覆「csdn文庫下載」便可免費領取【csdn】和【百度文庫】下載服務;公衆號後臺回覆「資料」:便可領取5T精品學習資料java面試考點java面經總結,以及幾十個java、大數據項目資料很全,你想找的幾乎都有

相關文章
相關標籤/搜索