<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3571字,需瀏覽 8分鐘

           ·

          2021-04-11 23:42

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


          作者:趙國(guó)生 王健
          來(lái)源:大數(shù)據(jù)DT(ID:hzdashuju)




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

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


          01 Scrapy框架介紹

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

          通過(guò)anaconda→environments→最右邊界面的第一個(gè)選項(xiàng)all,在搜索框里搜索scrapy→選擇安裝。

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

          # python 3+
          pip3 install scrapy

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

          ▲圖8-1 Scrapy框架

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


          02 Scrapy框架詳解

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

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

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

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

          2. Scrapy運(yùn)行流程

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

          1. 引擎從調(diào)度器中取出一個(gè)URL用于接下來(lái)的抓取;
          2. 引擎把URL封裝成一個(gè)請(qǐng)求(request)傳給下載器;
          3. 下載器把資源下載下來(lái),并封裝成一個(gè)響應(yīng)(response);
          4. 爬蟲解析響應(yīng);
          5. 解析出的是項(xiàng)目,則交給項(xiàng)目管道進(jìn)行進(jìn)一步的處理;
          6. 解析出的是鏈接URL,則把URL交給調(diào)度器等待下一步的抓取。

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

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

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

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


          03 Scrapy框架中的Selector

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

          • BeautifulSoup:作為程序員間非常流行的網(wǎng)頁(yè)分析庫(kù),它通?;贖TML代碼的結(jié)構(gòu)來(lái)構(gòu)造一個(gè)Python對(duì)象,對(duì)不良標(biāo)記的處理也非常合理,但它有一個(gè)缺點(diǎn),就是“慢”。
          • lxml:一個(gè)基于ElementTree的Python化的XML解析庫(kù)。

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

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

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

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

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

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

          延伸閱讀Python網(wǎng)絡(luò)爬蟲技術(shù)與實(shí)戰(zhàn)
          點(diǎn)擊上圖了解及購(gòu)買
          轉(zhuǎn)載請(qǐng)聯(lián)系微信:DoctorData

          推薦語(yǔ):本書是一本系統(tǒng)、全面地介紹Python網(wǎng)絡(luò)爬蟲的實(shí)戰(zhàn)寶典。作者融合自己豐富的工程實(shí)踐經(jīng)驗(yàn),緊密結(jié)合演示應(yīng)用案例,內(nèi)容覆蓋了幾乎所有網(wǎng)絡(luò)爬蟲涉及的核心技術(shù)。在內(nèi)容編排上,一步步地剖析算法背后的概念與原理,提供大量簡(jiǎn)潔的代碼實(shí)現(xiàn),助你從零基礎(chǔ)開始編程實(shí)現(xiàn)深度學(xué)習(xí)算法。


          劃重點(diǎn)??



          干貨直達(dá)??


          更多精彩??

          在公眾號(hào)對(duì)話框輸入以下關(guān)鍵詞
          查看更多優(yōu)質(zhì)內(nèi)容!

          PPT | 讀書 | 書單 | 硬核 | 干貨 | 講明白 | 神操作
          大數(shù)據(jù) | 云計(jì)算 | 數(shù)據(jù)庫(kù) | Python | 爬蟲 | 可視化
          AI | 人工智能 | 機(jī)器學(xué)習(xí) | 深度學(xué)習(xí) | NLP
          5G | 中臺(tái) | 用戶畫像 1024 | 數(shù)學(xué) | 算法 數(shù)字孿生

          據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個(gè)公眾號(hào)
          ??
          瀏覽 4
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天做夜夜操 | 免费毛片a在线看 | 粗暴大黑鸡巴视频欧美 | 97一区二区三区 | 欧美三级手机在线 |