python爬蟲工程師 成長之路六(三) Scrapy框架基礎


Scrapy框架介紹


  • Scrapy是Python開發的一個快速、高層次的屏幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試。
  • Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。
    [來自百度百科]

Scrapy架構及運行流程


Scrapy整體架構:
在這裏插入圖片描述
Scrapy運行流程:

  • ①:scheduler從待下載隊列中獲取url
  • ②:scheduler調用spider來爬取網頁
  • ③:downloader將網頁下載之後傳給spider
  • ④:提取目標數據,抽取出目標對象(item)交給實體管道(item pipeline)進行在加工
  • ⑤:將提取出來的url放入request隊列中

五個功能模塊

  • 引擎(Scrapy): 用來處理整個系統的數據流處理, 數據流的指揮官,負責控制數據流,控制各個模塊之間的通信
  • 調度器(Scheduler): 負責引擎發過來的請求URL,入隊行成一個URL的優先隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重複的網址
  • 下載器(Downloader): 用於下載網頁內容, 並將網頁內容返回給引擎Scrapy
  • 爬蟲(Spiders): 爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即Item。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
  • 項目管道(item Pipeline): 負責處理爬蟲從網頁中抽取的實體,主要的功能是處理或加工來自item的數據。

三大中間件

  • 下載器中間件(Downloader Middlewares): 位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
  • 爬蟲中間件(Spider Middlewares): 介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
  • 調度中間件(Scheduler Middewares): 介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。

Scrapy爬蟲項目創建


  1. 在命令行中cd進入項目存儲的路徑

    如,將項目存在D:/Pycharm下
    
    D:
    cd D:/pycharm
    

    在這裏插入圖片描述

  2. 使用‘scrapy startproject項目名’創建新項目

    如創建myscrapy
    
    scrapy startproject myscrapy
    

    在這裏插入圖片描述

  3. 利用python編輯器打開該項目

    如,用pycharm打開myscrapy
    

    在這裏插入圖片描述


Scrapy項目目錄結構


創建好的Scrapy項目如下

在這裏插入圖片描述
在這裏插入圖片描述

  • 1:項目
  • 2:項目核心目錄,用來放置爬蟲相關文件
  • 3:項目配置文件
    在這裏插入圖片描述
  • 1:項目初始化文件,裏面是項目的初始化信息
  • 2:項目數據容器文件,用來定義我們需要獲取的數據
  • 3:項目管道文件,對item中數據進行再加工
  • 4:項目設置文件

Scrapy項目 item


item常用結構化數據來保存一些爬取到關鍵信息

結構化數據:用於保存爬取到的一些關鍵數據,如網址,關鍵詞等;
#定義結構化數據
數據名=scrapy.Field()
#如定義網站url
url=scrapy.Field()

Scrapy項目 spider


Spider
scrapy.spiders.spider是用於我們自定義爬取所需數據的類。
創建spider需繼承scrapy.Spider類,同時需要定義三個屬性:

  • name:spider的名字,不能重複
  • start_urls:初始URL列表。當沒有制定特定的URL時,spider將從該列表中開始進行爬取。
  • parse(self,response):當請求url返回網頁沒有指定回調函數時,默認下載回調方法。
    該函數負責解析下載後的網頁,並生成下一個的URL;每次下載URL完後都需要調用該函數

可選屬性:

  • allowed_domains:包含了spider允許爬取的域名(domain)列表
  • start_requests()
    當spider啓動爬取並且未指定start_urls時,該方法被調用。

CrawlSpider
scrapy.spiders.CrawlSpider比scrapy.spiders.spider複雜一點的spider,在CrawlSpider中定義了一些rule用於跟進link,所以CrawlSpider比spider多一個基本屬性:

  • rule:包含一個(或多個) 規則對象的列表。 每個Rule對爬取網站的動作定義了特定操作。 如果多個rule匹配了相同的鏈接,則根據規則在列表中被定義的順序,第一個會被使用。

Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)

  • rule定義函數
  • link_extractor:其定義瞭如何從爬取到的頁面中提取鏈接。
  • callback:指定spider中哪個函數將會被調用。 從link_extractor中每獲取到鏈接時將會調用該函數。該回調函數接受一個response作爲其第一個參數(不能指定parse爲callback,否則會報錯)
  • cb_kwargs:包含傳遞給回調函數的參數(keyword argument)的字典。
  • follow:是一個布爾(boolean)值,指定了根據該規則從response提取的鏈接是否需要跟進。 如果callback爲None,follow默認設置爲True ,否則默認爲False。
  • process_links:指定該spider中哪個的函數將會被調用,從link_extractor中獲取到鏈接列表時將會調用該函數。該方法常用於過濾參數
  • process_request:指定該spider中哪個的函數將會被調用,該規則提取到每個request時都會調用該函數 (用來過濾request)

Scrapy項目 selector


selector常用於提取item,selector中內置XPath和CSS Selector表達式機制。
selector有四個基本方法:

  • xpath():傳入xpath表達式,以列表返回所有滿足條件的節點
  • css():傳入css表達式,以列表返回所有滿足條件的節點
  • extract():序列化該節點,將其轉換爲unicode的字符串並以list形式返回
  • re():傳入正則表達式,以unicode字符串的list形式返回

Scrapy項目 item pipeline


spider在獲取到item之後會將其傳到item pipeline,在item pipeline中可以定義一些對item的操作,如對數據查重,保存數據或檢驗數據


item pipeline組件是一個獨立的python類,定義時需實現process_item方法,spider獲取到item之後調用該方法
process_item(self,item,spider)

  • item:爬取到的結構化數據
  • spider:爬取該item的spider
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章