直接上圖(爬蟲架構圖)
① Scrapy Engine(引擎)
引擎負責控制數據流在系統(tǒng)中所有組件中流動酗失,并在相應動作發(fā)生時觸發(fā)事件蹭沛。 詳細內容查看下面的數據流(Data Flow)部分
② Scheduler(調度器)
調度器從引擎接受request并將他們入隊,以便之后引擎請求他們時提供給引擎
③ Downloader(下載器)
下載器負責獲取頁面數據并提供給引擎挂捅,而后提供給spider
④ Spiders(爬蟲文件)
Spider是Scrapy用戶編寫用于分析response并提取item(即獲取到的item)或額外跟進的URL的類枕面。 每 個spider負責處理一個特定(或一些)網站
⑤ Item Pipeline(管道)
Item Pipeline負責處理被spider提取出來的item励翼。典型的處理有清理、 驗證及持久化(例如存取到數 據庫中)
⑥ Downloader middlewares(下載器中間件)
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook)雕凹,處理Downloader傳遞給引擎的 response殴俱。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能
⑦ Spider middlewares(爬蟲中間件)
Spider中間件是在引擎及Spider之間的特定鉤子(specific hook)枚抵,處理spider的輸入(response)和輸出 (items及requests)线欲。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能
構架流程如下
引擎打開一個網站(open a domain)汽摹,找到處理該網站的Spider并向該spider請求第一個要爬取的 URL(s)询筏。
引擎從Spider中獲取到第一個要爬取的URL并在調度器(Scheduler)以Request調度。
引擎向調度器請求下一個要爬取的URL竖慧。
調度器返回下一個要爬取的URL給引擎嫌套,引擎將URL通過下載中間件(請求(request)方向)轉發(fā)給下載 器(Downloader)。
一旦頁面下載完畢圾旨,下載器生成一個該頁面的Response踱讨,并將其通過下載中間件(返回(response)方 向)發(fā)送給引擎。
引擎從下載器中接收到Response并通過Spider中間件(輸入方向)發(fā)送給Spider處理砍的。
Spider處理Response并返回爬取到的Item及(跟進的)新的Request給引擎痹筛。
引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
(從第二步)重復直到調度器中沒有更多地request帚稠,引擎關閉該網站
簡單粗暴的說就是:
1.首先下載器下載request回執(zhí)的html等的response
2.然后下載器傳給爬蟲解析
3.接著爬蟲解析后交給調度器過濾谣旁,查重等等
4.最后交給管道,進行爬取數據的處理
我個人喜歡用通用爬蟲,所以下面是我對通用爬蟲的一些小結
通用爬蟲:為了全站爬取
如何創(chuàng)建爬蟲項目:
- scrapy startproject 項目名稱
- scrapy genspider -t crawl 爬蟲名稱 域
rules規(guī)則屬性的參數:是一個元祖,可以放多個Rule對象
創(chuàng)建Rule:
LinkExtractor:設定提取規(guī)則
callback:設置回調函數
follwer:是否跟進
LinkExtractor屬性的每個方法
allow:一般跟一個正則表達式,表示提取的url
deny:同樣是跟一個正則表達式,符合正則表達式的連接,我們不提取(優(yōu)先級比allow高)
allowed_domains:提取的連接,必須在我設置的域下
deny_domains:同樣是設置提取連接時,一定不能提取deny_domains設置的域下
restrict_xpaths:當提取連接的時候,我們可以定位到某些標簽,提取標簽下,符合規(guī)則的標簽,遵循xpath語法
tags:可以指定要提取的哪些標簽
attrs:可以指定提取標簽的屬性
restrict_css:當提取連接的時候,我們可以定位到某些標簽,提取標簽下,符合規(guī)則的標簽,遵循css語法
strip:去掉空格
callback='':回調
process_links:設置一個函數,根據正則獲取url,可以在回調函數中獲取到
process_request:設置一個函數,可以在回調方法中攔截所有根據正則提取到的qequest對象
注意
- 設置回調的時候一定不能重寫parse方法
- 要獲取起始url的響應結果,必須重寫parse_start_url
- 在設置Rule對象的時候,如果沒有callback回調參數,默認表示跟進
什么情況下會用到通用爬蟲?
當我們提取數據的目標網站很有規(guī)律滋早,并且各個模塊很有規(guī)律榄审,我們可以使用通用爬蟲
菜鳥總結,大佬誤笑~~