Python3爬蟲(十八) Scrapy框架(二)

Infi_chu發表於2018-10-26

對Scrapy框架(一)的補充

Infi-chu:

http://www.cnblogs.com/Infi-chu/

 

Scrapy優點:
    提供了內建的 HTTP 快取 ,以加速本地開發 。
    提供了自動節流調節機制,而且具有遵守 robots.txt 的設定的能力。
    可以定義爬行深度的限制,以避免爬蟲進入死迴圈連結 。
    會自動保留會話。
    執行自動 HTTP 基本認證 。 不需要明確儲存狀態。
    可以自動填寫登入表單。
    Scrapy 有一個 內建的中介軟體 , 可以自動設定請求中 的引 用( refeπer )頭 。
    支援通過 3xx 響應重定向 ,也可以通過 HTML 元重新整理。
    避免被網站使用的<noscript> meta 重定向困住,以檢測沒有 JS 支援的頁面 。
    預設使用 css 選擇器或 XPath 編寫解析器。
    可以通過 Splash 或任何其他技術(如 Selenium ) 呈現 JavaScript 頁面。
    擁有強大的社群支援和豐富 的外掛和擴充套件來擴充套件其功能 。
    提供了通用的蜘蛛來抓取常見的格式 : 站點地圖、 csv 和 XML。
    內建支援以多種格式 CJSON 、 csv 、 XML、 JSON-lines )匯出收集的資料並將其儲存
    在多個後端( FTP , S3 、本地檔案系統)中。
    
Scrapy工作流程:
    1.引擎開啟一個網站( open a domain ) ,找到處理該網站的 Spider 並向該 Spider 請求第
    一個要爬取的URL(s)。
    2.引擎從 Spider 中 獲取第一個要爬取的 URL 並在排程器( Scheduler )中以 Request
    排程 。
    3.引擎向排程器請求下 一個要爬取的 URL 。
    4.排程器返回下一個要爬取的 URL 給引擎,引擎將 URL 通過下載中介軟體(請求( request)
    方向)轉發給下載器( Downloader )。
    5.一旦頁面下載完畢,下載器生成一個該頁面的 Response ,並將其通過下載中介軟體(返回 ( Response)方向)傳送給引擎。
    6.引擎從下載器中 接收 Response 並通過 Spider 中介軟體(輸入方向)傳送給 Spider 處理 。
    7. Spider 處理 Response 井返回爬取到的 Item 及(跟進的)新的 Request 給引擎。
    8.引擎將( Spider 返回的)爬取到的 Item 給 Item Pipeline ,將( Spider 返回的) Request
    給排程器。
    9. (從第 2 步)重複直到排程器中沒有更多的 Request,引擎關閉對該網站 的執行程式。
    
scrapy各元件功能:
    1.引擎
    引擎負責控制資料流在系統中所有元件中流動,並在相應動作發生時觸發事件。它也是程式的入口,可以通過 scrapy 指令方式在命令列啟動,或者通程式設計方式例項化後呼叫 start 方法啟動。
    2.排程器
    排程器從引擎接收爬取請求並將它們入隊,以便之後引擎請求它們時提供給引擎。一般來說,我們並不需要直接對排程器進行程式設計,它是由 Scrapy 主程式進行自動控制的。
    3.下載器
    下載器負責處理產生最終發出的請求物件 Request 並將返回的響應生成 Response物件傳遞給蜘蛛。
    4. Spiders
    Spider 是使用者編寫用於分析響應結果並從中提取 Item或額外跟進的 URL 的類。每個 Spider 負責處理一個特定網站。
    5.資料管道
    Item Pipeline 負責處理被 Spider 提取出來的 Item。典型的處理有清理、驗證及持久化。
    6.下載器中介軟體
    下載器中介軟體是在引擎及下載器之間的特定鉤子( specific hook ),處理 Downloader傳遞給引擎的 Response。其提供了 一個簡便的機制,通過插入自定義程式碼來擴充套件 Scrapy 的功能。
    7. Spider中介軟體
    Spider 中介軟體是在引擎及 Spider 之間的特定鉤子( specific hook ),處理 Spider 的輸入( Response )和輸出(Items 及 Requests )。其提供了一個簡便的機制,通過插入自定義程式碼來擴充套件 Scrapy 的功能。

Scrapy基本操作:
    安裝
        pip install scrapy
        【Windows版注意事項】
        環境要求:需要Microsoft Visual C++ 14.0 或以上版本

    基本操作命令

# 建立爬蟲專案
scrapy startproject 專案名
# 建立蜘蛛
scrapy genspider 檔名 爬取網站的域名
# 啟動爬蟲
scrapy crawl 檔名

    資料模型Item
        官方定義:爬取的主要目標就是從非結構的資料來源中提取結構性資料,如網頁。Scrapy提供Item類來滿足這樣的需求。Item物件是一種簡單的容器,儲存了爬取到的資料。其提供了類似於詞典的API,以及用於宣告可用欄位的簡單語法。
        宣告Item:Item使用簡單的class定義語法和Field物件來進行宣告。
        Item欄位(Item Fields):Field物件指明瞭對每個欄位的後設資料。

    蜘蛛Spider
        定義:Spider定義了爬取的動作以及分析某個網頁的地方
        Spider內部迴圈順序:
        1.以最初的URL初始化request,並設定回撥函式。當該request下載完畢並返回時,生成response,並作為引數傳給該回撥函式。Spider中初始的request是通過呼叫start_requests()來獲取的。此函式會讀取其中的URL,並以parse為回撥函式生成request。
        2.在回撥函式中分析返回的內容,返回Item或者一個包括二者的可迭代容器。返回的request物件之後會經過scrapy處理,下載相應的內容,並呼叫設定的callback函式。
        3.在回撥函式中,可以使用選擇器或其他的解析器卡來進行頁面分析,並根據分析的資料生成Item
        4.由Spider返回的Item將被存放到資料庫(由某些Item Pipeline處理)或者使用Feed exports儲存到檔案中。

    管道Item Pipeline
        定義:當Item在Spider中被收集之後,他將被傳遞到此管道中,一些元件會按照一定的順序對Item進行處理。
        作用:
        1.清理HTML資料
        2.驗證爬取的資料(檢查Item包含某些欄位)
        3.去重
        4.將爬取結果儲存到資料庫中。
        實質:輸入/輸出
        分類:
        1.過濾性管道
        2.加工性管道
        3.儲存性管道

   

相關文章