1. 程式人生 > >學習Scrapy一點總結

學習Scrapy一點總結

學習Scrapy一點總結

1、安裝

先安裝twiste

pip install twisted	

再安裝scrapy

pip install scrapy

中途會遇到pywin32錯誤

安裝pypiwin32

pip install pypiwin32

2、scrapy學習網址

scrapy學習網址

3、scrapy目錄結構

scrapy.cfg
myproject/
	__init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
    	__init__.py
        spider1.py
        spider2.py

scrapy.cfg:存放的目錄被認為是專案的根目錄,專案的配置檔案。

myproject:專案的python模組,將會從這裡引用程式碼。

items.py:定義了儲存資料的欄位名,在編輯此檔案前需先分析要提取哪些資訊,定義好名稱即可

pipelines.py:此檔案是用來處理提取的資料,可以將資料轉存為其他格式或資料庫中,如果要用此檔案,需要先在settings.py中指明pipelines.py中的類,並且如果有多個類的話,還要定義優先順序,就是後面的數字,越小優先順序越高,在每個pipeline類中必有一個process_item的函式,函式是資料處理的具體流程。

settings.py:一些專案的設定

Scrapy的執行機制

(1)、引擎從排程器中取出一個URl,用於接下來的抓取

(2)、引擎把URL封裝成請求(Request)傳給下載器,下載器把資源下載後封裝成答應包(Response)

(3)、爬蟲解析Response

(4)、若解析出實體(Item),則交給實體管道進行進一步的處理

(5)、若解析出的是URL,則把URL交給Scheduler等待抓取

Scrapy執行離不開各個元件相互合作和排程

引擎(Scrapy):處理整個系統的資料流,觸發事物(框架核心)

排程器(Scheduler):接受引擎發過來的請求,壓入佇列中,並在引擎再次請求的時候返回。

下載器(Downloader):用於下載網頁內容,並將網頁內容返回給蜘蛛(Scrapy下載器的執行原理是基於Twisted框架實現的)

爬蟲(Spiders):從特定的網頁中提取自己需要的資訊,即實體(Item)。也可以從中提出URl,讓Scrapy繼續抓取下一個頁面。

專案管道(Item Pipeline):負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體,驗證實體的有效性,清除不需要的資訊。當頁面被爬蟲解析後,將被髮送到專案管道,並經過幾個特定的次序處理資料。

下載器中介軟體(Downloader Middleware):位於Scrapy引擎和下載器之間的框架,處理引擎與下載器之間的請求及響應。

爬蟲中介軟體(Spider Middleware):介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。

排程中介軟體(Scheduler Middleware):介於Scrapy引擎和排程之間的中介軟體,從Scrapy引擎傳送到排程的請求和響應。

4、建立專案

1、建立專案目錄

scrapy startproject huangzhounews

2、建立一個新的spider專案

scrapy genspider hangzhou hznews.hangzhou.com.cn
# 後面加的是域名

建立完畢之後,就會在spiders目錄下生成一個hangzhou.py的檔案

import scrapy

class HangzhouSpider(scrapy.Spider):
    name = 'hanghzou'
    allowed_domains = ['hznews.hangzhou.com.cn']
    start_urls = ['http://hznews.hangzhou.com.cn/']
    
    def parse(self,response):
        pass

1、name = ‘’:這個爬蟲的識別名稱,必需是唯一的,在不同的爬蟲必需定義不同的名字。(一般和檔名一樣)

2、allow_domains = []:是搜尋的域名範圍,也就是爬蟲的約束區域,規定爬蟲只爬取這個域名下的網頁,不存在的URL會被忽略。

3、start_urls = ():爬取的url元組/列表。爬蟲從這裡開始抓取資料,所以,第一次下載的資料將會從這些urls開始。其他子URL將會從這些起始URl中繼承性生成。

4、parse(self,response):解析的方法,每個初始URL完成下載後將被呼叫,呼叫的時候傳入從每一個URL傳回的Response物件來作為唯一引數,主要作用如下:

負責解析返回的網頁資料(response.body),提取結構化資料(生成item)生成需要下一頁的URL請求

檢視所有爬蟲

scrapy list

5、scrapy shell

1、執行爬蟲,並且把結果儲存到指定檔案

scrapy crawl hanghzou -o hanghou.json

2、在執行之前,也可以用scrapy shell對xpath()/css()表示式進行驗證,能否提取到資料。

之所以用scrapy shell執行專案來檢測,是因為有的網站對於訪問次數和頻率有限制,如果頻繁執行專案,向對方網站傳送過多請求,就可能導致網站拒絕訪問。

而scrapy shell 在除錯的時候,一旦和某一個頁面建立連結,這個連結就不會中斷,可以不停的測試css和xpath,在此期間scrapy shell只向某一個url傳送了一次請求,所以可以減輕對網站的訪問率,而且除錯也方便。

可用方法

  • shelp():列印可用的物件和方法
  • fetch(url[,redirect=True]):爬取新的url並更新相關物件
  • fetch(request):通過request爬取,並更新相關物件
  • view(response):使用本地瀏覽器開啟爬取頁面
  • response.xpath(xpath):用於驗證是否匹配成功

6、中介軟體

Scrapy框架中的中介軟體主要分兩類:爬蟲中介軟體和下載中介軟體。其中最重要的是下載中介軟體,反爬策略都部署在下載中介軟體。

爬蟲中介軟體

爬蟲中介軟體是介入到Scrapy的spider處理機制的鉤子框架,可以新增程式碼來處理髮送給 Spiders 的response及spider產生的item和request。

  1. 當蜘蛛傳遞請求和items給引擎的過程中,蜘蛛中介軟體可以對其進行處理(過濾出 URL 長度比 URLLENGTH_LIMIT 的 request。)
  2. 當引擎傳遞響應給蜘蛛的過程中,蜘蛛中介軟體可以對響應進行過濾(例如過濾出所有失敗(錯誤)的 HTTP response)

下載中介軟體

下載中介軟體是處於引擎(Engine)和下載器(Downloader)之間的一層元件,可以有多個下載中介軟體被載入執行。

  1. 當引擎傳遞請求給下載器的過程中,下載中介軟體可以對請求進行處理 (例如增加http header資訊,增加proxy資訊等);
  2. 在下載器完成http請求,傳遞響應給引擎的過程中, 下載中介軟體可以對響應進行處理(例如進行gzip的解壓等)