學習Scrapy一點總結
學習Scrapy一點總結
1、安裝
先安裝twiste
pip install twisted
再安裝scrapy
pip install scrapy
中途會遇到pywin32錯誤
安裝pypiwin32
pip install pypiwin32
2、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的函式,函式是資料處理的具體流程。
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。
- 當蜘蛛傳遞請求和items給引擎的過程中,蜘蛛中介軟體可以對其進行處理(過濾出 URL 長度比 URLLENGTH_LIMIT 的 request。)
- 當引擎傳遞響應給蜘蛛的過程中,蜘蛛中介軟體可以對響應進行過濾(例如過濾出所有失敗(錯誤)的 HTTP response)
下載中介軟體
下載中介軟體是處於引擎(Engine)和下載器(Downloader)之間的一層元件,可以有多個下載中介軟體被載入執行。
- 當引擎傳遞請求給下載器的過程中,下載中介軟體可以對請求進行處理 (例如增加http header資訊,增加proxy資訊等);
- 在下載器完成http請求,傳遞響應給引擎的過程中, 下載中介軟體可以對響應進行處理(例如進行gzip的解壓等)