偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

終于有人把Scrapy爬蟲框架講明白了

網(wǎng)絡(luò) 通信技術(shù)
Scrapy由Python語言編寫,是一個快速、高層次的屏幕抓取和Web抓取框架,用于抓取Web站點并從頁面中提取出結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試等。

[[392377]]

本文轉(zhuǎn)載自微信公眾號「大數(shù)據(jù)DT」,作者趙國生 王健。轉(zhuǎn)載本文請聯(lián)系大數(shù)據(jù)DT公眾號。  

Scrapy是用純Python語言實現(xiàn)的一個為爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,Scrapy使用了Twisted異步網(wǎng)絡(luò)框架來處理網(wǎng)絡(luò)通信,可以加快我們的下載速度,不用自己去實現(xiàn)異步框架,并且包含了各種中間件接口,可以靈活地實現(xiàn)各種需求。

Scrapy可以應(yīng)用在包括數(shù)據(jù)挖掘、信息處理或存儲歷史數(shù)據(jù)等一系列的程序中,其最初是為頁面抓取(更確切地說是網(wǎng)絡(luò)抓取)而設(shè)計的,也可以應(yīng)用于獲取API所返回的數(shù)據(jù)(例如Amazon Associates Web Services)或者通用的網(wǎng)絡(luò)爬蟲。

01 Scrapy框架介紹

關(guān)于Scrapy框架的最簡單的安裝方法是:

通過anaconda→environments→最右邊界面的第一個選項all,在搜索框里搜索scrapy→選擇安裝。

或者在terminal或者cmd中使用pip安裝就好。

  1. # python 3+ 
  2. pip3 install scrapy 

Scrapy內(nèi)部實現(xiàn)了包括并發(fā)請求、免登錄、URL去重等很多復(fù)雜操作,用戶不需要明白Scrapy內(nèi)部具體的爬取策略,只需要根據(jù)自己的需求去編寫小部分的代碼,就能抓取到所需要的數(shù)據(jù)。Scrapy框架如圖8-1所示。

圖8-1 Scrapy框架

圖8-1中帶箭頭的線條表示數(shù)據(jù)流向,首先從初始URL開始,調(diào)度器(Scheduler)會將其交給下載器(Downloader),下載器向網(wǎng)絡(luò)服務(wù)器(Internet)發(fā)送服務(wù)請求以進行下載,得到響應(yīng)后將下載的數(shù)據(jù)交給爬蟲(Spider),爬蟲會對網(wǎng)頁進行分析,分析出來的結(jié)果有兩種:一種是需要進一步抓取的鏈接,這些鏈接會被傳回調(diào)度器;另一種是需要保存的數(shù)據(jù),它們則被送到項目管道(Item Pipeline),Item會定義數(shù)據(jù)格式,最后由Pipeline對數(shù)據(jù)進行清洗、去重等處理,繼而存儲到文件或數(shù)據(jù)庫。

02 Scrapy框架詳解

Scrapy由Python語言編寫,是一個快速、高層次的屏幕抓取和Web抓取框架,用于抓取Web站點并從頁面中提取出結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試等。

1. 框架內(nèi)組件及作用

Scrapy框架內(nèi)包含的組件如下:

  • 爬蟲中間件(Spider Middleware):位于Scrapy引擎和爬蟲之間的框架,主要用于處理爬蟲的響應(yīng)輸入和請求輸出。
  • 調(diào)度器中間件(Scheduler Middleware):位于Scrapy引擎和調(diào)度器之間的框架,主要用于處理從Scrapy引擎發(fā)送到調(diào)度器的請求和響應(yīng)。
  • 調(diào)度器:用來接收引擎發(fā)過來的請求,壓入隊列中,并在引擎再次請求的時候返回。它就像是一個URL的優(yōu)先隊列,由它來決定下一個要抓取的網(wǎng)址是什么,同時在這里會去除重復(fù)的網(wǎng)址。
  • 下載器中間件(Downloader Middleware):位于Scrapy引擎和下載器之間的框架,主要用于處理Scrapy引擎與下載器之間的請求及響應(yīng)。代理IP和用戶代理可以在這里設(shè)置。
  • 下載器:用于下載網(wǎng)頁內(nèi)容,并將網(wǎng)頁內(nèi)容返回給爬蟲。
  • Scrapy引擎(ScrapyEngine):用來控制整個系統(tǒng)的數(shù)據(jù)處理流程,并進行事務(wù)處理的觸發(fā)。
  • 爬蟲:爬蟲主要是干活的,用于從特定網(wǎng)頁中提取自己需要的信息,即所謂的項目(又稱實體)。也可以從中提取URL,讓Scrapy繼續(xù)爬取下一個頁面。
  • 項目管道:負責處理爬蟲從網(wǎng)頁中爬取的項目,主要的功能就是持久化項目、驗證項目的有效性、清除不需要的信息。當頁面被爬蟲解析后,將被送到項目管道,并經(jīng)過幾個特定的次序來處理其數(shù)據(jù)。

2. Scrapy運行流程

Scrapy運行流程如下:

  • 引擎從調(diào)度器中取出一個URL用于接下來的抓取;
  • 引擎把URL封裝成一個請求(request)傳給下載器;
  • 下載器把資源下載下來,并封裝成一個響應(yīng)(response);
  • 爬蟲解析響應(yīng);
  • 解析出的是項目,則交給項目管道進行進一步的處理;
  • 解析出的是鏈接URL,則把URL交給調(diào)度器等待下一步的抓取。

3. 數(shù)據(jù)流向

Scrapy數(shù)據(jù)流是由執(zhí)行流程的核心引擎來控制的,流程如圖8-2所示。

圖8-2 框架組件數(shù)據(jù)流

  • 引擎打開網(wǎng)站,找到處理該網(wǎng)站的爬蟲并向該爬蟲請求第一個要爬取的URL。
  • 引擎從爬蟲中獲取到第一個要爬取的URL,并在調(diào)度器中以請求調(diào)度。
  • 引擎向調(diào)度器請求下一個要爬取的URL。
  • 調(diào)度器返回下一個要爬取的URL給引擎,引擎通過下載中間件轉(zhuǎn)給下載器。
  • 一旦頁面下載完畢,下載器便會生成一個該頁面的響應(yīng),并通過下載器中間件將其發(fā)送給引擎。
  • 引擎從下載器中接收到響應(yīng)并通過爬蟲中間件發(fā)送給爬蟲處理。
  • 爬蟲處理響應(yīng),并返回爬取到的項目及新的請求給引擎。
  • 引擎將爬蟲爬取到的項目傳給項目管道,將爬蟲返回的請求傳給調(diào)度器。
  • 從第2步重復(fù)直到調(diào)度器中沒有更多的請求,引擎便會關(guān)閉該網(wǎng)站。

03 Scrapy框架中的Selector

當我們?nèi)〉昧司W(wǎng)頁的響應(yīng)之后,最關(guān)鍵的就是如何從繁雜的網(wǎng)頁中把我們需要的數(shù)據(jù)提取出來,Python中常用以下模塊來處理HTTP文本解析問題:

  • BeautifulSoup:作為程序員間非常流行的網(wǎng)頁分析庫,它通常基于HTML代碼的結(jié)構(gòu)來構(gòu)造一個Python對象,對不良標記的處理也非常合理,但它有一個缺點,就是“慢”。
  • lxml:一個基于ElementTree的Python化的XML解析庫。

我們可以在Scrapy中使用任意熟悉的網(wǎng)頁數(shù)據(jù)提取工具,如上面的兩種,但是,Scrapy本身也為我們提供了一套提取數(shù)據(jù)的機制,我們稱之為選擇器Selector,它通過特定的XPath或者CSS表達式來選擇HTML文件中的某個部分。

XPath是一門用來在XML文件中選擇節(jié)點的語言,也可以用在HTML上。CSS是一門將HTML文檔樣式化的語言。選擇器由它定義,并與特定的HTML元素的樣式相關(guān)連。

Selector是基于lxml來構(gòu)建的,支持XPath選擇器、CSS選擇器以及正則表達式,功能全面、解析速度快且和準確度高。

本文篇幅有限,具體實操案例請關(guān)注大數(shù)據(jù)DT后續(xù)內(nèi)容推送,或查閱《Python網(wǎng)絡(luò)爬蟲技術(shù)與實戰(zhàn)》一書第8章。查看更多爬蟲干貨文章,可關(guān)注大數(shù)據(jù)DT,在公眾號后臺對話框回復(fù)爬蟲。

關(guān)于作者:趙國生,哈爾濱師范大學教授,工學博士,碩士生導(dǎo)師,黑龍江省網(wǎng)絡(luò)安全技術(shù)領(lǐng)域特殊人才。主要從事可信網(wǎng)絡(luò)、入侵容忍、認知計算、物聯(lián)網(wǎng)安全等方向的教學與科研工作。

本文摘編自《Python網(wǎng)絡(luò)爬蟲技術(shù)與實戰(zhàn)》,經(jīng)出版方授權(quán)發(fā)布。

 

責任編輯:武曉燕 來源: 大數(shù)據(jù)DT
相關(guān)推薦

2021-03-25 11:24:25

爬蟲技術(shù)開發(fā)

2021-10-09 00:02:04

DevOps敏捷開發(fā)

2021-06-13 12:03:46

SaaS軟件即服務(wù)

2022-03-27 20:32:28

Knative容器事件模型

2021-06-29 11:21:41

數(shù)據(jù)安全網(wǎng)絡(luò)安全黑客

2022-01-05 18:27:44

數(shù)據(jù)挖掘工具

2020-11-30 08:34:44

大數(shù)據(jù)數(shù)據(jù)分析技術(shù)

2021-02-14 00:21:37

區(qū)塊鏈數(shù)字貨幣金融

2021-03-03 21:31:24

量化投資利潤

2022-04-22 11:26:55

數(shù)據(jù)管理架構(gòu)

2022-04-12 18:29:41

元數(shù)據(jù)系統(tǒng)架構(gòu)

2022-07-31 20:29:28

日志系統(tǒng)

2021-10-17 20:38:30

微服務(wù)內(nèi)存組件

2021-12-03 18:25:56

數(shù)據(jù)指標本質(zhì)

2022-04-27 18:25:02

數(shù)據(jù)采集維度

2021-10-12 18:31:40

流量運營前端

2020-11-03 07:04:39

云計算公有云私有云

2021-09-02 12:30:22

自動駕駛人工智能技術(shù)

2020-10-29 06:09:37

數(shù)據(jù)中臺數(shù)據(jù)大數(shù)據(jù)

2022-05-09 20:23:51

數(shù)據(jù)采集
點贊
收藏

51CTO技術(shù)棧公眾號