當前位置:成語大全網 - 新華字典 - Python編程基礎之(五)Scrapy爬蟲框架

Python編程基礎之(五)Scrapy爬蟲框架

經過前面四章的學習,我們已經可以使用Requests庫、Beautiful Soup庫和Re庫,編寫基本的Python爬蟲程序了。那麽這壹章就來學習壹個專業的網絡爬蟲框架--Scrapy。沒錯,是框架,而不是像前面介紹的函數功能庫。

Scrapy是壹個快速、功能強大的網絡爬蟲框架。

可能大家還不太了解什麽是框架,爬蟲框架其實是實現爬蟲功能的壹個軟件結構和功能組件的集合。

簡而言之, Scrapy就是壹個爬蟲程序的半成品,可以幫助用戶實現專業的網絡爬蟲。

使用Scrapy框架,不需要妳編寫大量的代碼,Scrapy已經把大部分工作都做好了,允許妳調用幾句代碼便自動生成爬蟲程序,可以節省大量的時間。

當然,框架所生成的代碼基本是壹致的,如果遇到壹些特定的爬蟲任務時,就不如自己使用Requests庫搭建來的方便了。

PyCharm安裝

測試安裝:

出現框架版本說明安裝成功。

掌握Scrapy爬蟲框架的結構是使用好Scrapy的重中之重!

先上圖:

整個結構可以簡單地概括為: “5+2”結構和3條數據流

5個主要模塊(及功能):

(1)控制所有模塊之間的數據流。

(2)可以根據條件觸發事件。

(1)根據請求下載網頁。

(1)對所有爬取請求進行調度管理。

(1)解析DOWNLOADER返回的響應--response。

(2)產生爬取項--scraped item。

(3)產生額外的爬取請求--request。

(1)以流水線方式處理SPIDER產生的爬取項。

(2)由壹組操作順序組成,類似流水線,每個操作是壹個ITEM PIPELINES類型。

(3)清理、檢查和查重爬取項中的HTML數據並將數據存儲到數據庫中。

2個中間鍵:

(1)對Engine、Scheduler、Downloader之間進行用戶可配置的控制。

(2)修改、丟棄、新增請求或響應。

(1)對請求和爬取項進行再處理。

(2)修改、丟棄、新增請求或爬取項。

3條數據流:

(1):圖中數字 1-2

1:Engine從Spider處獲得爬取請求--request。

2:Engine將爬取請求轉發給Scheduler,用於調度。

(2):圖中數字 3-4-5-6

3:Engine從Scheduler處獲得下壹個要爬取的請求。

4:Engine將爬取請求通過中間件發送給Downloader。

5:爬取網頁後,Downloader形成響應--response,通過中間件發送給Engine。

6:Engine將收到的響應通過中間件發送給Spider處理。

(3):圖中數字 7-8-9

7:Spider處理響應後產生爬取項--scraped item。

8:Engine將爬取項發送給Item Pipelines。

9:Engine將爬取請求發送給Scheduler。

任務處理流程:從Spider的初始爬取請求開始爬取,Engine控制各模塊數據流,不間斷從Scheduler處獲得爬取請求,直至請求為空,最後到Item Pipelines存儲數據結束。

作為用戶,只需配置好Scrapy框架的Spider和Item Pipelines,也就是數據流的入口與出口,便可完成壹個爬蟲程序的搭建。Scrapy提供了簡單的爬蟲命令語句,幫助用戶壹鍵配置剩余文件,那我們便來看看有哪些好用的命令吧。

Scrapy采用命令行創建和運行爬蟲

PyCharm打開Terminal,啟動Scrapy:

Scrapy基本命令行格式:

具體常用命令如下:

下面用壹個例子來學習壹下命令的使用:

1.建立壹個Scrapy爬蟲工程,在已啟動的Scrapy中繼續輸入:

執行該命令,系統會在PyCharm的工程文件中自動創建壹個工程,命名為pythonDemo。

2.產生壹個Scrapy爬蟲,以教育部網站為例:

命令生成了壹個名為demo的spider,並在Spiders目錄下生成文件demo.py。

命令僅用於生成demo.py文件,該文件也可以手動生成。

觀察壹下demo.py文件:

3.配置產生的spider爬蟲,也就是demo.py文件:

4.運行爬蟲,爬取網頁:

如果爬取成功,會發現在pythonDemo下多了壹個t20210816_551472.html的文件,我們所爬取的網頁內容都已經寫入該文件了。

以上就是Scrapy框架的簡單使用了。

Request對象表示壹個HTTP請求,由Spider生成,由Downloader執行。

Response對象表示壹個HTTP響應,由Downloader生成,有Spider處理。

Item對象表示壹個從HTML頁面中提取的信息內容,由Spider生成,由Item Pipelines處理。Item類似於字典類型,可以按照字典類型來操作。