日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python 爬虫进阶一之爬虫框架概述

發(fā)布時(shí)間:2023/12/9 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 爬虫进阶一之爬虫框架概述 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

綜述

爬蟲入門之后,我們有兩條路可以走。 一個(gè)是繼續(xù)深入學(xué)習(xí),以及關(guān)于設(shè)計(jì)模式的一些知識,強(qiáng)化 Python 相關(guān)知識,自己動(dòng)手造輪子,繼續(xù)為自己的爬蟲增加分布式,多線程等功能擴(kuò)展。另一條路便是學(xué)習(xí)一些優(yōu)秀的框架,先把這些框架用熟,可以確保能夠應(yīng)付一些基本的爬蟲任務(wù),也就是所謂的解決溫飽問題,然后再深入學(xué)習(xí)它的源碼等知識,進(jìn)一步強(qiáng)化。 就個(gè)人而言,前一種方法其實(shí)就是自己動(dòng)手造輪子,前人其實(shí)已經(jīng)有了一些比較好的框架,可以直接拿來用,但是為了自己能夠研究得更加深入和對爬蟲有更全面的了解,自己動(dòng)手去多做。后一種方法就是直接拿來前人已經(jīng)寫好的比較優(yōu)秀的框架,拿來用好,首先確保可以完成你想要完成的任務(wù),然后自己再深入研究學(xué)習(xí)。第一種而言,自己探索的多,對爬蟲的知識掌握會(huì)比較透徹。第二種,拿別人的來用,自己方便了,可是可能就會(huì)沒有了深入研究框架的心情,還有可能思路被束縛。 不過個(gè)人而言,我自己偏向后者。造輪子是不錯(cuò),但是就算你造輪子,你這不也是在基礎(chǔ)類庫上造輪子么?能拿來用的就拿來用,學(xué)了框架的作用是確保自己可以滿足一些爬蟲需求,這是最基本的溫飽問題。倘若你一直在造輪子,到最后都沒造出什么來,別人找你寫個(gè)爬蟲研究了這么長時(shí)間了都寫不出來,豈不是有點(diǎn)得不償失?所以,進(jìn)階爬蟲我還是建議學(xué)習(xí)一下框架,作為自己的幾把武器。至少,我們可以做到了,就像你拿了把槍上戰(zhàn)場了,至少,你是可以打擊敵人的,比你一直在磨刀好的多吧?

框架概述

博主接觸了幾個(gè)爬蟲框架,其中比較好用的是 Scrapy 和 PySpider。就個(gè)人而言,pyspider 上手更簡單,操作更加簡便,因?yàn)樗黾恿?WEB 界面,寫爬蟲迅速,集成了 phantomjs,可以用來抓取 js 渲染的頁面。Scrapy 自定義程度高,比 PySpider 更底層一些,適合學(xué)習(xí)研究,需要學(xué)習(xí)的相關(guān)知識多,不過自己拿來研究分布式和多線程等等是非常合適的。 在這里博主會(huì)一一把自己的學(xué)習(xí)經(jīng)驗(yàn)寫出來與大家分享,希望大家可以喜歡,也希望可以給大家一些幫助。

PySpider

PySpider 是 binux 做的一個(gè)爬蟲架構(gòu)的開源化實(shí)現(xiàn)。主要的功能需求是:

  • 抓取、更新調(diào)度多站點(diǎn)的特定的頁面
  • 需要對頁面進(jìn)行結(jié)構(gòu)化信息提取
  • 靈活可擴(kuò)展,穩(wěn)定可監(jiān)控

而這也是絕大多數(shù) python 爬蟲的需求 —— 定向抓取,結(jié)構(gòu)化化解析。但是面對結(jié)構(gòu)迥異的各種網(wǎng)站,單一的抓取模式并不一定能滿足,靈活的抓取控制是必須的。為了達(dá)到這個(gè)目的,單純的配置文件往往不夠靈活,于是,通過腳本去控制抓取是最后的選擇。 而去重調(diào)度,隊(duì)列,抓取,異常處理,監(jiān)控等功能作為框架,提供給抓取腳本,并保證靈活性。最后加上 web 的編輯調(diào)試環(huán)境,以及 web 任務(wù)監(jiān)控,即成為了這套框架。 pyspider 的設(shè)計(jì)基礎(chǔ)是:以 python 腳本驅(qū)動(dòng)的抓取環(huán)模型爬蟲

  • 通過 python 腳本進(jìn)行結(jié)構(gòu)化信息的提取,follow 鏈接調(diào)度抓取控制,實(shí)現(xiàn)最大的靈活性
  • 通過 web 化的腳本編寫、調(diào)試環(huán)境。web 展現(xiàn)調(diào)度狀態(tài)
  • 抓取環(huán)模型成熟穩(wěn)定,模塊間相互獨(dú)立,通過消息隊(duì)列連接,從單進(jìn)程到多機(jī)分布式靈活拓展


pyspider 的架構(gòu)主要分為 scheduler(調(diào)度器), fetcher(抓取器), processor(腳本執(zhí)行):

  • 各個(gè)組件間使用消息隊(duì)列連接,除了 scheduler 是單點(diǎn)的,fetcher 和 processor 都是可以多實(shí)例分布式部署的。 scheduler 負(fù)責(zé)整體的調(diào)度控制
  • 任務(wù)由 scheduler 發(fā)起調(diào)度,fetcher 抓取網(wǎng)頁內(nèi)容, processor 執(zhí)行預(yù)先編寫的 python 腳本,輸出結(jié)果或產(chǎn)生新的提鏈任務(wù)(發(fā)往 scheduler),形成閉環(huán)。
  • 每個(gè)腳本可以靈活使用各種 python 庫對頁面進(jìn)行解析,使用框架 API 控制下一步抓取動(dòng)作,通過設(shè)置回調(diào)控制解析動(dòng)作。

Scrapy

Scrapy 是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。 其最初是為了頁面抓取 (更確切來說,網(wǎng)絡(luò)抓取) 所設(shè)計(jì)的, 也可以應(yīng)用在獲取 API 所返回的數(shù)據(jù) (例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡(luò)爬蟲。Scrapy 用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動(dòng)化測試

Scrapy 使用了 Twisted 異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通訊。整體架構(gòu)大致如下

Scrapy 主要包括了以下組件:

  • 引擎 (Scrapy): 用來處理整個(gè)系統(tǒng)的數(shù)據(jù)流處理,觸發(fā)事務(wù) (框架核心)
  • 調(diào)度器 (Scheduler): 用來接受引擎發(fā)過來的請求,壓入隊(duì)列中,并在引擎再次請求的時(shí)候返回。可以想像成一個(gè) URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊(duì)列,由它來決定下一個(gè)要抓取的網(wǎng)址是什么,同時(shí)去除重復(fù)的網(wǎng)址
  • 下載器 (Downloader): 用于下載網(wǎng)頁內(nèi)容,并將網(wǎng)頁內(nèi)容返回給蜘蛛 (Scrapy 下載器是建立在 twisted 這個(gè)高效的異步模型上的)
  • 爬蟲 (Spiders): 爬蟲是主要干活的,用于從特定的網(wǎng)頁中提取自己需要的信息,即所謂的實(shí)體 (Item)。用戶也可以從中提取出鏈接,讓 Scrapy 繼續(xù)抓取下一個(gè)頁面
  • 項(xiàng)目管道 (Pipeline): 負(fù)責(zé)處理爬蟲從網(wǎng)頁中抽取的實(shí)體,主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。當(dāng)頁面被爬蟲解析后,將被發(fā)送到項(xiàng)目管道,并經(jīng)過幾個(gè)特定的次序處理數(shù)據(jù)。
  • 下載器中間件 (Downloader Middlewares): 位于 Scrapy 引擎和下載器之間的框架,主要是處理 Scrapy 引擎與下載器之間的請求及響應(yīng)。
  • 爬蟲中間件 (Spider Middlewares): 介于 Scrapy 引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應(yīng)輸入和請求輸出。
  • 調(diào)度中間件 (Scheduler Middewares): 介于 Scrapy 引擎和調(diào)度之間的中間件,從 Scrapy 引擎發(fā)送到調(diào)度的請求和響應(yīng)。

Scrapy 運(yùn)行流程大概如下:

  • 首先,引擎從調(diào)度器中取出一個(gè)鏈接 (URL) 用于接下來的抓取
  • 引擎把 URL 封裝成一個(gè)請求 (Request) 傳給下載器,下載器把資源下載下來,并封裝成應(yīng)答包 (Response)
  • 然后,爬蟲解析 Response
  • 若是解析出實(shí)體(Item), 則交給實(shí)體管道進(jìn)行進(jìn)一步的處理。
  • 若是解析出的是鏈接(URL), 則把 URL 交給 Scheduler 等待抓取

總結(jié)

以上是生活随笔為你收集整理的Python 爬虫进阶一之爬虫框架概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。