從本篇開始學習 Scrapy 爬蟲框架
Python爬蟲教程-30-Scrapy 爬蟲框架介紹
- 框架:框架就是對於相同的相似的部分,程式碼做到不出錯,而我們就可以將注意力放到我們自己的部分了
- 常見爬蟲框架:
- scrapy
- pyspider
- crawley
- Scrapy 是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中
- Scrapy 官方文件
Scrapy 的安裝
- 可以直接在 Pycharm 進行安裝
- 【PyCharm】>【file】>【settings】>【Project Interpreter】>【+】 >【scrapy】>【install】
- 具體操作截圖:
- 點選左下角 install 靜靜等待
測試 Scrapy 是否安裝成功
- 進入當前所在的環境
- 輸入 scrapy 命令
- 截圖:
- 這裡就說明安裝成功l
Scrapy 概述
- 包含各個部件
- ScrapyEngine:神經中樞,大腦,核心
- Scheduler 排程器:負責處理請求,引擎發來的 request 請求,排程器需要處理,然後交換引擎
- Downloader 下載器:把引擎發來的 requests 發出請求,得到 response
- Spider 爬蟲:負責把下載器得到的網頁/結果進行分解,分解成資料 + 連結
- ItemPipeline 管道:詳細處理 Item
- DownloaderMiddleware 下載中介軟體:自定義下載的功能擴充套件元件
- SpiderMiddleware 爬蟲中介軟體:對 spider 進行功能擴充套件
- 資料流圖:
- 綠色箭頭是資料的流向
- 由 Spider 開始 Requests, Requests, Responses, Items
爬蟲專案大致流程
- 1.新建專案:scrapy startproject xxx專案名
- 2.明確需要爬取的目標/產品:編寫 item.py
- 3.製作爬蟲:地址 spider/xxspider.py 負責分解,提取下載的資料
- 4.儲存內容:pipelines.py
模組介紹
- ItemPipeline
- 對應 pipelines 檔案
- 爬蟲提取出資料存入 item 後,item 中儲存的資料需要進一步處理,比如清洗,去蟲,儲存等
- Pipeline 需要處理 process_item 函式
- process_item
- spider 提取出來的 item 作為引數傳入,同時傳入的還有 spider
- 此方法必須實現
- 必須返回一個 Item 物件,被丟棄的 item 不會被之後的 pipeline
- _ init _:建構函式
- 進行一些必要的引數初始化
- open_spider(spider):
- spider 物件對開啟的時候呼叫
- close_spider(spider):
- 當 spider 物件被關閉的時候呼叫
- Spider
- 對應的是資料夾 spider 下的檔案
- _ init _:初始化爬蟲名稱,start _urls 列表
- start_requests:生成 Requests 物件交給 Scrapy 下載並返回 response
- parse:根據返回的 response 解析出相應的 item,item 自動進入 pipeline:如果需要,解析 url,url自動交給 requests 模組,一直迴圈下去
- start_requests:此方法盡能被呼叫一次,讀取 start _urls 內容並啟動迴圈過程
- name:設定爬蟲名稱
- start_urls:設定開始第一批爬取的 url
- allow_domains:spider 允許去爬的域名列表
- start_request(self):只被呼叫一次
- parse:檢測編碼
- log:日誌記錄
中介軟體(DownloaderMiddlewares)
- 什麼是中介軟體?
- 中介軟體是處於引擎和下載器中間的一層元件,可以有多個
- 參照上面的流程圖,我們把中介軟體理解成成一個通道,簡單說,就是在請求/響應等傳輸的時候,在過程中設一個檢查哨,例如:
- 1.身份的偽裝: UserAgent,我們偽裝身份,不是在開始請求的時候就設定好,而是在請求的過程中,設定中介軟體,當檢測到傳送請求的時候,攔下請求頭,修改 UserAgent 值
- 2.篩選響應資料:我們最開始得到的資料,是整個頁面,假設某個操作,需要我們過濾掉所有圖片,我們就可以在響應的過程中,設定一箇中介軟體
- 比較抽象,可能不是很好理解,但是過程是其實很簡單的
- 在 middlewares 檔案中
- 需要在 settings 中設定以是生效
- 一般一箇中介軟體完成一項功能
- 必須實現以下一個或者多個方法
- process_request (self, request, spider)
- 在請求的過程中被呼叫
- 必須返回 None 或 Response 或 Request 或 raise IgnoreRequest
- 如果返回 None:scrapy 將繼續處理 request
- 如果返回 Request:scrapy 會停止呼叫 process_request 並沖洗排程返回的 request
- 如果返回 Response:scrapy 將不會呼叫其他的 process_request 或者 process _exception,直接將該 response 作為結果返回,同時會呼叫 process _response
- process_response (self, request, spider)
- 每次返回結果的時候自動呼叫
- process_request (self, request, spider)
- 下一篇連結:Python爬蟲教程-31-建立 Scrapy 爬蟲框架專案
更多文章連結:Python 爬蟲隨筆
- 本筆記不允許任何個人和組織轉載