做者:xiaoyu
微信公衆號:Python數據科學
知乎:Python數據分析師html
在爬蟲的路上,學習scrapy
是一個必不可少的環節。也許有好多朋友此時此刻也正在接觸並學習scrapy
,那麼很好,咱們一塊兒學習。開始接觸scrapy
的朋友可能會有些疑惑,畢竟是一個框架,上來不知從何學起。從本篇起,博主將開啓scrapy
學習的系列,分享如何快速入門scrapy並熟練使用它。python
本篇做爲第一篇,主要介紹和了解scrapy
,在結尾會向你們推薦一本關於學習scrapy
的書,以及獲取的方式。redis
若是你對爬蟲的基礎知識有了必定了解的話,那麼是時候該瞭解一下爬蟲框架了。那麼爲何要使用爬蟲框架?數據庫
博主當時是根據這幾點來進行爬蟲框架的學習的,可是切記核心目標是掌握一種框架思想,一種框架的能力,掌握了這種思想你才能更好的去使用它,甚至擴展它。編程
比較流行的爬蟲的框架有scrapy
和pyspider
,可是被你們所鍾愛的我想非scrapy
莫屬了。scrapy
是一個開源的高級爬蟲框架,咱們能夠稱它爲"scrapy語言"。它使用python
編寫,用於爬取網頁,提取結構性數據,並可將抓取得結構性數據較好的應用於數據分析和數據挖掘。scrapy
有如下的一些特色:微信
scrapy
基於事件的機制,利用twisted
的設計實現了非阻塞的異步操做。這相比於傳統的阻塞式請求,極大的提升了CPU的使用率,以及爬取效率。scrapy + redis
、爬蟲可視化等插件。scrapy
封裝了xpath
等解析器,提供了更方便更高級的selector
構造器,可有效的處理破損的HTML
代碼和編碼。有的朋友問了,爲何要使用scrapy,不使用不行嗎?用resquests + beautifulsoup
組合難道不能完成嗎?多線程
不用糾結,根據本身方便來。resquests + beautifulsoup
固然能夠了,requests + 任何解析器都行,都是很是好的組合。這樣用的優勢是咱們能夠靈活的寫咱們本身的代碼,沒必要拘泥於固定模式。對於使用固定的框架有時候不必定用起來方便,好比scrapy對於反反爬的處理並無很完善,好多時候也要本身來解決。架構
可是對於一些中小型的爬蟲任務來說,scrapy
確實是很是好的選擇,它避免了咱們來寫一些重複的代碼,而且有着出色的性能。咱們本身寫代碼的時候,好比爲了提升爬取效率,每次都本身碼多線程或異步等代碼,大大浪費了開發時間。這時候使用已經寫好的框架是再好不過的選擇了,咱們只要簡單的寫寫解析規則和pipeline
就行了。那麼具體哪些是須要咱們作的呢?看看下面這個圖就明白了。框架
參考來源在本文末dom
所以,對於該用哪一個,根據我的需求和喜愛決定。可是至於學習的前後順序,博主建議先學學resquests + beautifulsoup
,而後再接觸Scrapy
效果可能會更好些,僅供參考。
在學習Scrapy
以前,咱們須要瞭解Scrapy
的架構,明白這個架構對學習scrapy相當重要。
Scrapy官方文檔的圖片
下面的描述引自官方doc文檔(在此引用),講的很清楚明白,對照這個圖看就能明白。
Scrapy Engine
引擎負責控制數據流在系統中全部組件中流動,並在相應動做發生時觸發事件。 詳細內容查看下面的數據流(Data Flow)
部分。
調度器(Scheduler)
調度器從引擎接受request
並將他們入隊,以便以後引擎請求他們時提供給引擎。
下載器(Downloader)
下載器負責獲取頁面數據並提供給引擎,然後提供給spider
。
SpidersSpider
是Scrapy
用戶編寫用於分析response
並提取item
(即獲取到的item)或額外跟進的URL的類。 每一個spider
負責處理一個特定(或一些)網站。
Item PipelineItem Pipeline
負責處理被spider
提取出來的item
。典型的處理有清理、 驗證及持久化(例如存取到數據庫中)。
下載器中間件(Downloader middlewares)
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook)
,處理Downloader
傳遞給引擎的response
。 其提供了一個簡便的機制,經過插入自定義代碼來擴展Scrapy
功能。
Spider中間件(Spider middlewares)Spider中間件
是在引擎及Spider之間的特定鉤子(specific hook)
,處理spider
的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,經過插入自定義代碼來擴展Scrapy功能。
(open a domain)
,找處處理該網站的Spider
並向該spider
請求第一個要爬取的URL(s)。Spider
中獲取到第一個要爬取的URL並在調度器(Scheduler)
以Request
調度。(request)
方向)轉發給下載器(Downloader)
。Response
,並將其經過下載中間件(返回(response)
方向)發送給引擎。Response
並經過Spider中間件
(輸入方向)發送給Spider處理。Spider
處理Response
並返回爬取到的Item
及(跟進的)新的Request給引擎。Item Pipeline
,將(Spider返回的)Request給調度器。request
,引擎關閉該網站。下面博主列出兩個學習scrapy
的參考資料。
"scrapy"
來得到。參考:
https://doc.scrapy.org/en/lat...
https://www.cnblogs.com/x-pyu...
關注微信公衆號Python數據科學,獲取 120G
人工智能 學習資料。