Python27scrapy
⑴ python中的scrapy是什麼意思a
Scrapy英文意思是刮擦
被用來命名爬蟲界知名的框架。
使用這個框架可以輕易實現常規網頁採集。也支持大型架構。升級後redis更是支持分布式。利用scrapyd更是可以發布服務。
從事爬蟲方向必學!
⑵ scrapy和python有什麼關系
Scrapy是Python開發的一個快速、高層次的web數據抓取框架,用於抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,可以用於數據挖掘和監測。
Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等。
Scrapy算得上是Python世界中最常用的爬蟲框架了,同時它也是我掌握的幾種流行語言中最好的爬蟲框架,沒有之一!我認為它也是最難學習的框架,同樣沒有之一。很多初學Scarpy的經常向我抱怨完全不清楚Scrapy該怎樣入手,即使看的是中文的文檔,也感到很難理解。我當初接觸Scrapy時也有這樣的感覺。之所以感到Scrapy難學,究其原因,是其官方文檔實在太過凌亂,又缺少實用的代碼例子,讓人看得雲里霧里,不知其所已然。雖然其文檔不良,但卻沒有遮擋住它的光輝,它依然是Python世界中目前最好用的爬蟲框架。其架構的思路、蜘蛛執行的效能,還有可擴展的能力都非常出眾,再配以Python語言的簡潔輕巧,使得爬蟲的開發事半功倍。
相關推薦:《Python基礎教程》
Scrapy的優點:
(1)提供了內置的HTTP緩存,以加速本地開發。
(2)提供了自動節演調節機制,而且具有遵守robots.txt的設置的能力。
(3)可以定義爬行深度的限制,以避免爬蟲進入死循環鏈接。
(4)會自動保留會話。
(5)執行自動HTTP基本認證。不需要明確保存狀態。
(6)可以自動填寫登錄表單。
(7)Scrapy有一個內置的中間件,可以自動設置請求中的引用(referrer)頭。
(8)支持通過3xx響應重定向,也可以通過HTML元刷新。
(9)避免被網站使用的meta重定向困住,以檢測沒有JS支持的頁面。
(10)默認使用CSS選擇器或XPath編寫解析器。
(11)可以通過Splash或任何其他技術(如Selenium)呈現JavaScript頁面。
(12)擁有強大的社區支持和豐富的插件和擴展來擴展其功能。
(13)提供了通用的蜘蛛來抓取常見的格式:站點地圖、CSV和XML。
(14)內置支持以多種格式(JSON、CSV、XML、JSON-lines)導出收集的數據並將其存在多個後端(FTP、S3、本地文件系統)中。
Scrapy框架原理
Scrapy Engine(引擎):負責Spider、ItemPipeline、Downloader、Scheler中間的通訊,信號、數據傳遞等。
Scheler(調度器):負責接收引擎發送過來的Request請求,並按照一定的方式進行整理排列,入隊,當引擎需要時,交還給引擎。
Downloader(下載器):負責下載Scrapy Engine(引擎)發送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
Spider(爬蟲):負責處理所有Responses,從中分析提取數據,獲取Item欄位需要的數據,並將需要跟進的URL提交給引擎,再次進入Scheler(調度器),
Item Pipeline(管道):負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、存儲等)的地方.
Downloader Middlewares(下載中間件):你可以當作是一個可以自定義擴展下載功能的組件。
Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests)
Scrapy各個組件介紹
·Scrapy Engine:
引擎負責控制數據流在系統中所有組件中流動,並在相應動作發生時觸發事件。它也是程序的入口,可以通過scrapy指令方式在命令行啟動,或普通編程方式實例化後調用start方法啟動。
·調度器(Scheler)
調度器從引擎接收爬取請求(Request)並將它們入隊,以便之後引擎請求它們時提供給引擎。一般來說,我們並不需要直接對調度器進行編程,它是由Scrapy主進程進行自動控制的。
·下載器(Down-loader)
下載器負責獲取頁面數據並提供給引擎,而後將網站的響應結果對象提供給蜘蛛(Spider)。具體點說,下載器負責處理產生最終發出的請求對象 Request 並將返回的響應生成 Response對象傳遞給蜘蛛。
·蜘蛛——Spiders
Spider是用戶編寫用於分析響應(Response)結果並從中提取Item(即獲取的Item)或額外跟進的URL的類。每個Spider負責處理一個特定(或一些)網站。
·數據管道——Item Pipeline
Item Pipeline 負責處理被 Spider 提取出來的 Item。 典型的處理有清理、驗證及持久化(例如,存取到資料庫中)。
·下載器中間件(Downloader middle-wares)
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的Response。其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy的功能。
·Spider中間件(Spider middle-wares)
Spider 中間件是在引擎及 Spider 之間的特定鉤子(specific hook),處理 Spider 的輸入(Response)和輸出(Items及Requests)。其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy的功能。
從Scrapy的系統架構可見,它將整個爬網過程進行了非常具體的細分,並接管了絕大多數復雜的工作,例如,產生請求和響應對象、控制爬蟲的並發等。
⑶ Python編程基礎之(五)Scrapy爬蟲框架
經過前面四章的學習,我們已經可以使用Requests庫、Beautiful Soup庫和Re庫,編寫基本的Python爬蟲程序了。那麼這一章就來學習一個專業的網路爬蟲框架--Scrapy。沒錯,是框架,而不是像前面介紹的函數功能庫。
Scrapy是一個快速、功能強大的網路爬蟲框架。
可能大家還不太了解什麼是框架,爬蟲框架其實是實現爬蟲功能的一個軟體結構和功能組件的集合。
簡而言之, Scrapy就是一個爬蟲程序的半成品,可以幫助用戶實現專業的網路爬蟲。
使用Scrapy框架,不需要你編寫大量的代碼,Scrapy已經把大部分工作都做好了,允許你調用幾句代碼便自動生成爬蟲程序,可以節省大量的時間。
當然,框架所生成的代碼基本是一致的,如果遇到一些特定的爬蟲任務時,就不如自己使用Requests庫搭建來的方便了。
PyCharm安裝
測試安裝:
出現框架版本說明安裝成功。
掌握Scrapy爬蟲框架的結構是使用好Scrapy的重中之重!
先上圖:
整個結構可以簡單地概括為: 「5+2」結構和3條數據流
5個主要模塊(及功能):
(1)控制所有模塊之間的數據流。
(2)可以根據條件觸發事件。
(1)根據請求下載網頁。
(1)對所有爬取請求進行調度管理。
(1)解析DOWNLOADER返回的響應--response。
(2)產生爬取項--scraped item。
(3)產生額外的爬取請求--request。
(1)以流水線方式處理SPIDER產生的爬取項。
(2)由一組操作順序組成,類似流水線,每個操作是一個ITEM PIPELINES類型。
(3)清理、檢查和查重爬取項中的HTML數據並將數據存儲到資料庫中。
2個中間鍵:
(1)對Engine、Scheler、Downloader之間進行用戶可配置的控制。
(2)修改、丟棄、新增請求或響應。
(1)對請求和爬取項進行再處理。
(2)修改、丟棄、新增請求或爬取項。
3條數據流:
(1):圖中數字 1-2
1:Engine從Spider處獲得爬取請求--request。
2:Engine將爬取請求轉發給Scheler,用於調度。
(2):圖中數字 3-4-5-6
3:Engine從Scheler處獲得下一個要爬取的請求。
4:Engine將爬取請求通過中間件發送給Downloader。
5:爬取網頁後,Downloader形成響應--response,通過中間件發送給Engine。
6:Engine將收到的響應通過中間件發送給Spider處理。
(3):圖中數字 7-8-9
7:Spider處理響應後產生爬取項--scraped item。
8:Engine將爬取項發送給Item Pipelines。
9:Engine將爬取請求發送給Scheler。
任務處理流程:從Spider的初始爬取請求開始爬取,Engine控制各模塊數據流,不間斷從Scheler處獲得爬取請求,直至請求為空,最後到Item Pipelines存儲數據結束。
作為用戶,只需配置好Scrapy框架的Spider和Item Pipelines,也就是數據流的入口與出口,便可完成一個爬蟲程序的搭建。Scrapy提供了簡單的爬蟲命令語句,幫助用戶一鍵配置剩餘文件,那我們便來看看有哪些好用的命令吧。
Scrapy採用命令行創建和運行爬蟲
PyCharm打開Terminal,啟動Scrapy:
Scrapy基本命令行格式:
具體常用命令如下:
下面用一個例子來學習一下命令的使用:
1.建立一個Scrapy爬蟲工程,在已啟動的Scrapy中繼續輸入:
執行該命令,系統會在PyCharm的工程文件中自動創建一個工程,命名為pythonDemo。
2.產生一個Scrapy爬蟲,以教育部網站為例http://www.moe.gov.cn:
命令生成了一個名為demo的spider,並在Spiders目錄下生成文件demo.py。
命令僅用於生成demo.py文件,該文件也可以手動生成。
觀察一下demo.py文件:
3.配置產生的spider爬蟲,也就是demo.py文件:
4.運行爬蟲,爬取網頁:
如果爬取成功,會發現在pythonDemo下多了一個t20210816_551472.html的文件,我們所爬取的網頁內容都已經寫入該文件了。
以上就是Scrapy框架的簡單使用了。
Request對象表示一個HTTP請求,由Spider生成,由Downloader執行。
Response對象表示一個HTTP響應,由Downloader生成,有Spider處理。
Item對象表示一個從HTML頁面中提取的信息內容,由Spider生成,由Item Pipelines處理。Item類似於字典類型,可以按照字典類型來操作。
⑷ 如何在scrapy框架下,用python實現爬蟲自動跳轉頁面來抓去網頁內容
Scrapy是一個用Python寫的Crawler Framework,簡單輕巧,並且非常方便。Scrapy使用Twisted這個非同步網路庫來處理網路通信,架構清晰,並且包含了各種中間件介面,可以靈活地完成各種需求。Scrapy整體架構如下圖所示:
根據架構圖介紹一下Scrapy中的各大組件及其功能:
Scrapy引擎(Engine):負責控制數據流在系統的所有組建中流動,並在相應動作發生觸發事件。
調度器(Scheler):從引擎接收Request並將它們入隊,以便之後引擎請求request時提供給引擎。
下載器(Downloader):負責獲取頁面數據並提供給引擎,而後提供給Spider。
Spider:Scrapy用戶編寫用於分析Response並提取Item(即獲取到的Item)或額外跟進的URL的類。每個Spider負責處理一個特定(或一些網站)。
Item Pipeline:負責處理被Spider提取出來的Item。典型的處理有清理驗證及持久化(例如存儲到資料庫中,這部分後面會介紹存儲到MySQL中,其他的資料庫類似)。
下載器中間件(Downloader middlewares):是在引擎即下載器之間的特定鉤子(special hook),處理Downloader傳遞給引擎的Response。其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能(後面會介紹配置一些中間並激活,用以應對反爬蟲)。
Spider中間件(Spider middlewares):是在引擎及Spider之間的特定鉤子(special hook),處理Spider的輸入(response)和輸出(Items即Requests)。其提供了一個簡便的機制,通過插入自定義的代碼來擴展Scrapy功能。
⑸ Python中的爬蟲框架有哪些呢
實現爬蟲技術的編程環境有很多種,Java、Python、C++等都可以用來爬蟲。但很多人選擇Python來寫爬蟲,為什麼呢?因為Python確實很適合做爬蟲,豐富的第三方庫十分強大,簡單幾行代碼便可實現你想要的功能。更重要的,Python也是數據挖掘和分析的好能手。那麼,Python爬蟲一般用什麼框架比較好?
一般來講,只有在遇到比較大型的需求時,才會使用Python爬蟲框架。這樣的做的主要目的,是為了方便管理以及擴展。本文我將向大家推薦十個Python爬蟲框架。
1、Scrapy:Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。它是很強大的爬蟲框架,可以滿足簡單的頁面爬取,比如可以明確獲知url pattern的情況。用這個框架可以輕松爬下來如亞馬遜商品信息之類的數據。但是對於稍微復雜一點的頁面,如weibo的頁面信息,這個框架就滿足不了需求了。它的特性有:HTML, XML源數據 選擇及提取 的內置支持;提供了一系列在spider之間共享的可復用的過濾器(即 Item Loaders),對智能處理爬取數據提供了內置支持。
2、Crawley:高速爬取對應網站的內容,支持關系和非關系資料庫,數據可以導出為JSON、XML等。
3、Portia:是一個開源可視化爬蟲工具,可讓使用者在不需要任何編程知識的情況下爬取網站!簡單地注釋自己感興趣的頁面,Portia將創建一個蜘蛛來從類似的頁面提取數據。簡單來講,它是基於scrapy內核;可視化爬取內容,不需要任何開發專業知識;動態匹配相同模板的內容。
4、newspaper:可以用來提取新聞、文章和內容分析。使用多線程,支持10多種語言等。作者從requests庫的簡潔與強大得到靈感,使用Python開發的可用於提取文章內容的程序。支持10多種語言並且所有的都是unicode編碼。
5、Python-goose:Java寫的文章提取工具。Python-goose框架可提取的信息包括:文章主體內容、文章主要圖片、文章中嵌入的任何Youtube/Vimeo視頻、元描述、元標簽。
6、Beautiful Soup:名氣大,整合了一些常用爬蟲需求。它是一個可以從HTML或XML文件中提取數據的Python庫。它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間。Beautiful Soup的缺點是不能載入JS。
7、mechanize:它的優點是可以載入JS。當然它也有缺點,比如文檔嚴重缺失。不過通過官方的example以及人肉嘗試的方法,還是勉強能用的。
8、selenium:這是一個調用瀏覽器的driver,通過這個庫你可以直接調用瀏覽器完成某些操作,比如輸入驗證碼。Selenium是自動化測試工具,它支持各種瀏覽器,包括 Chrome,Safari,Firefox等主流界面式瀏覽器,如果在這些瀏覽器裡面安裝一個 Selenium 的插件,可以方便地實現Web界面的測試. Selenium支持瀏覽器驅動。Selenium支持多種語言開發,比如 Java,C,Ruby等等,PhantomJS 用來渲染解析JS,Selenium 用來驅動以及與Python的對接,Python進行後期的處理。
9、cola:是一個分布式的爬蟲框架,對於用戶來說,只需編寫幾個特定的函數,而無需關注分布式運行的細節。任務會自動分配到多台機器上,整個過程對用戶是透明的。項目整體設計有點糟,模塊間耦合度較高。
10、PySpider:一個國人編寫的強大的網路爬蟲系統並帶有強大的WebUI。採用Python語言編寫,分布式架構,支持多種資料庫後端,強大的WebUI支持腳本編輯器,任務監視器,項目管理器以及結果查看器。Python腳本控制,可以用任何你喜歡的html解析包。