亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python爬蟲(chóng)框架Scrapy簡(jiǎn)介

 更新時(shí)間:2022年06月06日 09:20:35   作者:springsnow  
這篇文章介紹了Python爬蟲(chóng)框架Scrapy,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在爬蟲(chóng)的路上,學(xué)習(xí)scrapy是一個(gè)必不可少的環(huán)節(jié)。也許有好多朋友此時(shí)此刻也正在接觸并學(xué)習(xí)scrapy,那么很好,我們一起學(xué)習(xí)。開(kāi)始接觸scrapy的朋友可能會(huì)有些疑惑,畢竟是一個(gè)框架,上來(lái)不知從何學(xué)起。從本篇起,博主將開(kāi)啟scrapy學(xué)習(xí)的系列,分享如何快速入門(mén)scrapy并熟練使用它。

本篇作為第一篇,主要介紹和了解scrapy,在結(jié)尾會(huì)向大家推薦一本關(guān)于學(xué)習(xí)scrapy的書(shū),以及獲取的方式。

為什么要用爬蟲(chóng)框架?

如果你對(duì)爬蟲(chóng)的基礎(chǔ)知識(shí)有了一定了解的話,那么是時(shí)候該了解一下爬蟲(chóng)框架了。那么為什么要使用爬蟲(chóng)框架?

  • 學(xué)習(xí)框架的根本是學(xué)習(xí)一種編程思想,而不應(yīng)該僅僅局限于是如何使用它。從了解到掌握一種框架,其實(shí)是對(duì)一種思想理解的過(guò)程。
  • 框架也給我們的開(kāi)發(fā)帶來(lái)了極大的方便。許多條條框框都已經(jīng)是寫(xiě)好了的,并不需要我們重復(fù)造輪子,我們只需要根據(jù)自己的需求定制自己要實(shí)現(xiàn)的功能就好了,大大減少了工作量。
  • 參考并學(xué)習(xí)優(yōu)秀的框架代碼,提升編程代碼能力。

博主當(dāng)時(shí)是根據(jù)這幾點(diǎn)來(lái)進(jìn)行爬蟲(chóng)框架的學(xué)習(xí)的,但是切記核心目標(biāo)是掌握一種框架思想,一種框架的能力,掌握了這種思想你才能更好的去使用它,甚至擴(kuò)展它。

scrapy框架的介紹

比較流行的爬蟲(chóng)的框架有scrapy和pyspider,但是被大家所鐘愛(ài)的我想非scrapy莫屬了。scrapy是一個(gè)開(kāi)源的高級(jí)爬蟲(chóng)框架,我們可以稱它為"scrapy語(yǔ)言"。它使用python編寫(xiě),用于爬取網(wǎng)頁(yè),提取結(jié)構(gòu)性數(shù)據(jù),并可將抓取得結(jié)構(gòu)性數(shù)據(jù)較好的應(yīng)用于數(shù)據(jù)分析和數(shù)據(jù)挖掘。scrapy有以下的一些特點(diǎn):

  • scrapy基于事件的機(jī)制,利用twisted的設(shè)計(jì)實(shí)現(xiàn)了非阻塞的異步操作。這相比于傳統(tǒng)的阻塞式請(qǐng)求,極大的提高了CPU的使用率,以及爬取效率。
  • 配置簡(jiǎn)單,可以簡(jiǎn)單的通過(guò)設(shè)置一行代碼實(shí)現(xiàn)復(fù)雜功能。
  • 可拓展,插件豐富,比如分布式scrapy + redis、爬蟲(chóng)可視化等插件。
  • 解析方便易用,scrapy封裝了xpath等解析器,提供了更方便更高級(jí)的selector構(gòu)造器,可有效的處理破損的HTML代碼和編碼。

scrapy和requests+bs用哪個(gè)好?

有的朋友問(wèn)了,為什么要使用scrapy,不使用不行嗎?用resquests + beautifulsoup組合難道不能完成嗎?

不用糾結(jié),根據(jù)自己方便來(lái)。resquests + beautifulsoup當(dāng)然可以了,requests + 任何解析器都行,都是非常好的組合。這樣用的優(yōu)點(diǎn)是我們可以靈活的寫(xiě)我們自己的代碼,不必拘泥于固定模式。對(duì)于使用固定的框架有時(shí)候不一定用起來(lái)方便,比如scrapy對(duì)于反反爬的處理并沒(méi)有很完善,好多時(shí)候也要自己來(lái)解決。

但是對(duì)于一些中小型的爬蟲(chóng)任務(wù)來(lái)講,scrapy確實(shí)是非常好的選擇,它避免了我們來(lái)寫(xiě)一些重復(fù)的代碼,并且有著出色的性能。我們自己寫(xiě)代碼的時(shí)候,比如為了提高爬取效率,每次都自己碼多線程或異步等代碼,大大浪費(fèi)了開(kāi)發(fā)時(shí)間。這時(shí)候使用已經(jīng)寫(xiě)好的框架是再好不過(guò)的選擇了,我們只要簡(jiǎn)單的寫(xiě)寫(xiě)解析規(guī)則和pipeline就好了。那么具體哪些是需要我們做的呢?看看下面這個(gè)圖就明白了。

因此,對(duì)于該用哪個(gè),根據(jù)個(gè)人需求和喜好決定。但是至于學(xué)習(xí)的先后順序,建議先學(xué)學(xué)resquests + beautifulsoup,然后再接觸Scrapy效果可能會(huì)更好些,僅供參考。

scrapy的架構(gòu)

在學(xué)習(xí)Scrapy之前,我們需要了解Scrapy的架構(gòu),明白這個(gè)架構(gòu)對(duì)學(xué)習(xí)scrapy至關(guān)重要。

Scrapy官方文檔的圖片

下面的描述引自官方doc文檔(在此引用),講的很清楚明白,對(duì)照這個(gè)圖看就能明白。

組件

Scrapy Engine
引擎負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動(dòng),并在相應(yīng)動(dòng)作發(fā)生時(shí)觸發(fā)事件。 詳細(xì)內(nèi)容查看下面的數(shù)據(jù)流(Data Flow)部分。

調(diào)度器(Scheduler)
調(diào)度器從引擎接受request并將他們?nèi)腙?duì),以便之后引擎請(qǐng)求他們時(shí)提供給引擎。

下載器(Downloader)
下載器負(fù)責(zé)獲取頁(yè)面數(shù)據(jù)并提供給引擎,而后提供給spider。

Spiders
Spider是Scrapy用戶編寫(xiě)用于分析response并提取item(即獲取到的item)或額外跟進(jìn)的URL的類(lèi)。 每個(gè)spider負(fù)責(zé)處理一個(gè)特定(或一些)網(wǎng)站。

Item Pipeline
Item Pipeline負(fù)責(zé)處理被spider提取出來(lái)的item。典型的處理有清理、 驗(yàn)證及持久化(例如存取到數(shù)據(jù)庫(kù)中)。

下載器中間件(Downloader middlewares)
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個(gè)簡(jiǎn)便的機(jī)制,通過(guò)插入自定義代碼來(lái)擴(kuò)展Scrapy功能。

Spider中間件(Spider middlewares)
Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個(gè)簡(jiǎn)便的機(jī)制,通過(guò)插入自定義代碼來(lái)擴(kuò)展Scrapy功能。

數(shù)據(jù)流過(guò)程

  • 引擎打開(kāi)一個(gè)網(wǎng)站(open a domain),找到處理該網(wǎng)站的Spider并向該spider請(qǐng)求第一個(gè)要爬取的URL(s)。
  • 引擎從Spider中獲取到第一個(gè)要爬取的URL并在調(diào)度器(Scheduler)以Request調(diào)度。
  • 引擎向調(diào)度器請(qǐng)求下一個(gè)要爬取的URL。
  • 調(diào)度器返回下一個(gè)要爬取的URL給引擎,引擎將URL通過(guò)下載中間件(請(qǐng)求(request)方向)轉(zhuǎn)發(fā)給下載器(Downloader)。
  • 一旦頁(yè)面下載完畢,下載器生成一個(gè)該頁(yè)面的Response,并將其通過(guò)下載中間件(返回(response)方向)發(fā)送給引擎。
  • 引擎從下載器中接收到Response并通過(guò)Spider中間件(輸入方向)發(fā)送給Spider處理。
  • Spider處理Response并返回爬取到的Item及(跟進(jìn)的)新的Request給引擎。
  • 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調(diào)度器。
  • (從第二步)重復(fù)直到調(diào)度器中沒(méi)有更多地request,引擎關(guān)閉該網(wǎng)站。

到此這篇關(guān)于Python爬蟲(chóng)框架Scrapy的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python并發(fā)編程協(xié)程(Coroutine)之Gevent詳解

    Python并發(fā)編程協(xié)程(Coroutine)之Gevent詳解

    這篇文章主要介紹了Python并發(fā)編程協(xié)程(Coroutine)之Gevent詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • pandas庫(kù)之DataFrame滑動(dòng)窗口的實(shí)現(xiàn)

    pandas庫(kù)之DataFrame滑動(dòng)窗口的實(shí)現(xiàn)

    本文主要介紹了pandas庫(kù)之DataFrame滑動(dòng)窗口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python中集合創(chuàng)建與使用詳解

    Python中集合創(chuàng)建與使用詳解

    集合是無(wú)序的,無(wú)序也就沒(méi)有索引,不能進(jìn)行索引相關(guān)的操作,下面這篇文章主要給大家介紹了關(guān)于Python中集合創(chuàng)建與使用,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Keras在訓(xùn)練期間可視化訓(xùn)練誤差和測(cè)試誤差實(shí)例

    Keras在訓(xùn)練期間可視化訓(xùn)練誤差和測(cè)試誤差實(shí)例

    這篇文章主要介紹了Keras在訓(xùn)練期間可視化訓(xùn)練誤差和測(cè)試誤差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python多版本工具miniconda的配置優(yōu)化實(shí)現(xiàn)

    python多版本工具miniconda的配置優(yōu)化實(shí)現(xiàn)

    通過(guò)Miniconda,您可以輕松地創(chuàng)建和管理多個(gè)Python環(huán)境,同時(shí)確保每個(gè)環(huán)境具有所需的依賴項(xiàng)和軟件包,本文主要介紹了python多版本工具miniconda的配置優(yōu)化實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • Python中矩陣創(chuàng)建和矩陣運(yùn)算方法

    Python中矩陣創(chuàng)建和矩陣運(yùn)算方法

    今天小編就為大家分享一篇Python中矩陣創(chuàng)建和矩陣運(yùn)算方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • python生成器與迭代器詳解

    python生成器與迭代器詳解

    本文主要給大家記錄一下列表生成式,生成器和迭代器的知識(shí)點(diǎn),希望對(duì)大家學(xué)習(xí)python能夠有所幫助
    2019-01-01
  • Python全局變量用法實(shí)例分析

    Python全局變量用法實(shí)例分析

    這篇文章主要介紹了Python全局變量用法,結(jié)合實(shí)例形式分析了Python中全局變量的定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié)

    python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié)

    大家好,本篇文章主要講的是python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python中模塊(Module)和包(Package)的區(qū)別詳解

    Python中模塊(Module)和包(Package)的區(qū)別詳解

    這篇文章主要介紹了Python中模塊(Module)和包(Package)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論