文章目錄
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爬蟲項目創建
-
在命令行中cd進入項目存儲的路徑
如,將項目存在D:/Pycharm下
D: cd D:/pycharm
-
使用‘scrapy startproject項目名’創建新項目
如創建myscrapy
scrapy startproject myscrapy
-
利用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