国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Scrapy框架使用之Spider+Item+Pipline的簡(jiǎn)單使用

            Scrapy框架使用之Spider+Item+Pipline的簡(jiǎn)單使用

            來(lái)源:千鋒教育
            發(fā)布人:qyf
            時(shí)間: 2022-09-19 17:53:35 1663581215

              在 Scrapy 中要抓取和解析一些邏輯內(nèi)容和提取網(wǎng)站的鏈接,其實(shí)都是需要在 Spider 中完成的。在上一篇文章中我們介紹了Scarpy框架的簡(jiǎn)單使用,后面一些文章我們要陸續(xù)介紹框架里面的Spider、配置、管道、中間件等。scrapy 框架分為spider爬蟲(chóng)和CrawlSpider(規(guī)則爬蟲(chóng)),本篇文章主要介紹Spider爬蟲(chóng)的使用。

              spider

              在實(shí)現(xiàn) Scrapy 爬蟲(chóng)項(xiàng)目時(shí),最核心的類(lèi)就是 Spider 類(lèi)了,它定義了如何爬取某個(gè)網(wǎng)站的流程和解析方式。簡(jiǎn)單來(lái)講,Spider 要做的事就是如下兩件。

              • 定義爬取網(wǎng)站的動(dòng)作

              • 分析爬取下來(lái)的網(wǎng)頁(yè)

              對(duì)于 Spider 類(lèi)來(lái)說(shuō),整個(gè)爬取循環(huán)如下所述。

              • 以初始的 URL 初始化 Request,并設(shè)置回調(diào)函數(shù)。 當(dāng)該 Request 成功請(qǐng)求并返回時(shí),將生成 Response,并作為參數(shù)傳給該回調(diào)函數(shù)。

              • 在回調(diào)函數(shù)內(nèi)分析返回的網(wǎng)頁(yè)內(nèi)容。返回結(jié)果可以有兩種形式,一種是解析到的有效結(jié)果返回字典或 Item 對(duì)象。下一步可經(jīng)過(guò)處理后(或直接)保存,另一種是解析得下一個(gè)(如下一頁(yè))鏈接,可以利用此鏈接構(gòu)造 Request 并設(shè)置新的回調(diào)函數(shù),返回 Request。

              • 如果返回的是字典或 Item 對(duì)象,可通過(guò) Feed Exports 等形式存入到文件,如果設(shè)置了 Pipeline 的話,可以經(jīng)由 Pipeline 處理(如過(guò)濾、修正等)并保存。

              • 如果返回的是 Reqeust,那么 Request 執(zhí)行成功得到 Response 之后會(huì)再次傳遞給 Request 中定義的回調(diào)函數(shù),可以再次使用選擇器來(lái)分析新得到的網(wǎng)頁(yè)內(nèi)容,并根據(jù)分析的數(shù)據(jù)生成 Item。

              通過(guò)以上幾步循環(huán)往復(fù)進(jìn)行,便完成了站點(diǎn)的爬取。

              我們以星巴克網(wǎng)站為例,為大家介紹Spider類(lèi),首先創(chuàng)建項(xiàng)目和創(chuàng)建爬蟲(chóng),具體步驟如下:

              scrapy startproject starbuckspro

              進(jìn)入starbuckspro中,執(zhí)行scrapy genspider starbucks https://www.starbucks.com.cn

              此時(shí)我們就可以看到,有爬蟲(chóng)文件產(chǎn)生如圖:

            Picture

              此時(shí)大家看到類(lèi):StarbucksSpider繼承自scrapy.Spider,這個(gè)類(lèi)是最簡(jiǎn)單最基本的 Spider 類(lèi),任何其他的 Spider 必須繼承這個(gè)類(lèi),包括后文要說(shuō)明的一些特殊 Spider 類(lèi)也都是繼承自它。這個(gè)類(lèi)里提供了 startrequests () 方法的默認(rèn)實(shí)現(xiàn),讀取并請(qǐng)求 starturls 屬性,并根據(jù)返回的結(jié)果調(diào)用 parse () 方法解析結(jié)果。另外它還有一些基礎(chǔ)屬性,下面對(duì)其進(jìn)行講解:

              name: 爬蟲(chóng)名稱(chēng),是定義 Spider 名字的字符串。Spider 的名字定義了 Scrapy 如何定位并初始化 Spider,所以其必須是唯一的。如果該 Spider 爬取單個(gè)網(wǎng)站,一個(gè)常見(jiàn)的做法是以該網(wǎng)站的域名名稱(chēng)來(lái)命名 Spider。

              allowed_domains:允許爬取的域名,是可選配置,不在此范圍的鏈接不會(huì)被跟進(jìn)爬取。

              start_urls:起始 URL 列表,當(dāng)我們沒(méi)有實(shí)現(xiàn) start_requests () 方法時(shí),默認(rèn)會(huì)從這個(gè)列表開(kāi)始抓取。

              當(dāng)然還有custom_settings和settings,可以進(jìn)行一些設(shè)置或者獲取一些全局的設(shè)置。而crawler屬性是由 from_crawler () 方法設(shè)置的,代表的是本 Spider 類(lèi)對(duì)應(yīng)的 Crawler 對(duì)象。

              除了一些基礎(chǔ)屬性,Spider 還有一些常用的方法:

              start_requests ():此方法用于生成初始請(qǐng)求,它必須返回一個(gè)可迭代對(duì)象,此方法會(huì)默認(rèn)使用 start_urls 里面的 URL 來(lái)構(gòu)造 Request,而且 Request 是 GET 請(qǐng)求方式。如果我們想在啟動(dòng)時(shí)以 POST 方式訪問(wèn)某個(gè)站點(diǎn),可以直接重寫(xiě)這個(gè)方法,發(fā)送 POST 請(qǐng)求時(shí)我們使用 FormRequest 即可。

              parse ():當(dāng) Response 沒(méi)有指定回調(diào)函數(shù)時(shí),該方法會(huì)默認(rèn)被調(diào)用,它負(fù)責(zé)處理 Response,處理返回結(jié)果,并從中提取出想要的數(shù)據(jù)和下一步的請(qǐng)求,然后返回。該方法需要返回一個(gè)包含 Request 或 Item 的可迭代對(duì)象。

              closed ():當(dāng) Spider 關(guān)閉時(shí),該方法會(huì)被調(diào)用,在這里一般會(huì)定義釋放資源的一些操作或其他收尾操作。

              當(dāng)前星巴克的菜單頁(yè)面如上圖,我們要爬取里面的所有菜單名稱(chēng)和圖片。parse()方法在 Response 沒(méi)有指定回調(diào)函數(shù)時(shí),會(huì)默認(rèn)被調(diào)用。所以里面的參數(shù)response就是我們獲取的頁(yè)面結(jié)果,我們要從頁(yè)面中提取想要的菜單名稱(chēng)和圖片鏈接地址進(jìn)行保存。于是我們要重寫(xiě)parse()方法和定義Item.py文件

              Item

              在抓取數(shù)據(jù)的過(guò)程中,主要要做的事就是從雜亂的數(shù)據(jù)中提取出結(jié)構(gòu)化的數(shù)據(jù)。Scrapy的Spider可以把數(shù)據(jù)提取為一個(gè)Python中的字典,雖然字典使用起來(lái)非常方便,對(duì)我們來(lái)說(shuō)也很熟悉,但是字典有一個(gè)缺點(diǎn):缺少固定結(jié)構(gòu)。在一個(gè)擁有許多爬蟲(chóng)的大項(xiàng)目中,字典非常容易造成字段名稱(chēng)上的語(yǔ)法錯(cuò)誤,或者是返回不一致的數(shù)據(jù)。

              所以Scrapy中,定義了一個(gè)專(zhuān)門(mén)的通用數(shù)據(jù)結(jié)構(gòu):Item。這個(gè)Item對(duì)象提供了跟字典相似的API,并且有一個(gè)非常方便的語(yǔ)法來(lái)聲明可用的字段。

              我們的Item的代碼內(nèi)容如下(因?yàn)橹恍枰4婷Q(chēng)和圖片鏈接即可):

            Picture(1)

              構(gòu)建items.py文件完成后,還需要進(jìn)一步處理爬取的數(shù)據(jù),這就需要修改該項(xiàng)目中的pipelines.py文件。

              Pipeline

              Item Pipeline 是項(xiàng)目管道。也是保存結(jié)構(gòu)數(shù)據(jù)的地。它的調(diào)用發(fā)生在 Spider 產(chǎn)生 Item 之后。當(dāng) Spider 解析完 Response 之后,Item 就會(huì)傳遞到 Item Pipeline,被定義的 Item Pipeline 組件會(huì)順次調(diào)用,完成一連串的處理過(guò)程,比如數(shù)據(jù)清洗、存儲(chǔ)等。 它的主要功能有:

              • 清洗 HTML 數(shù)據(jù)

              • 驗(yàn)證爬取數(shù)據(jù),檢查爬取字段

              • 查重并丟棄重復(fù)內(nèi)容

              • 將爬取結(jié)果儲(chǔ)存到數(shù)據(jù)庫(kù)

              定義Item非常簡(jiǎn)單,只需要繼承scrapy.Item類(lèi),并將所有字段都定義為scrapy.Field類(lèi)型即可。Field對(duì)象可用來(lái)對(duì)每個(gè)字段指定元數(shù)據(jù)。

              其中經(jīng)常使用的方法就是processitem () ,被定義的 Item Pipeline 會(huì)默認(rèn)調(diào)用這個(gè)方法對(duì) Item 進(jìn)行處理。比如,我們可以進(jìn)行數(shù)據(jù)處理或者將數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)等操作。它必須返回 Item 類(lèi)型的值或者拋出一個(gè) DropItem 異常。 processitem () 方法的參數(shù)有如下兩個(gè)。

              • item,是 Item 對(duì)象,即被處理的 Item

              • spider,是 Spider 對(duì)象,即生成該 Item 的 Spider

              所以我們的Pipeline代碼如下(將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中):

            Picture(2)

              注意在settings.py中設(shè)置當(dāng)前的Pipeline。

            Picture(3)

              為了避免被發(fā)現(xiàn)爬蟲(chóng)我們還可以在settings.py中,如下設(shè)置:

            Picture(4)

            Picture(5)

              準(zhǔn)備活動(dòng)完成后,我們開(kāi)始編寫(xiě)我們的爬蟲(chóng)文件,爬取頁(yè)面的分析如下圖

            Picture(6)

            Picture(7)

              執(zhí)行爬蟲(chóng)通過(guò)命令:scrapy crawl starbucks,則最后的下載數(shù)據(jù)結(jié)果如下:

            Picture(8)

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            Visual Studio Online和GitHub有什么區(qū)別?

            1.定位不同Visual Studio Online,現(xiàn)更名為Visual Studio Codespaces,是微軟提供的一款在線開(kāi)發(fā)環(huán)境,允許開(kāi)發(fā)者在云端進(jìn)行編程和調(diào)試工作。而...詳情>>

            2023-10-15 00:21:42
            什么是域控制器?

            一、域控制器的定義域控制器是指在Windows Server操作系統(tǒng)中部署Active Directory服務(wù)的服務(wù)器。Active Directory是微軟公司開(kāi)發(fā)的目錄服務(wù),用...詳情>>

            2023-10-15 00:10:28
            深度學(xué)習(xí)模型權(quán)重h5、weights、ckpt、pth有什么區(qū)別?

            1.來(lái)源框架不同h5格式通常用于Keras和TensorFlow框架,weights用于Darknet框架,ckpt是TensorFlow框架的一種格式,而pth則主要用于PyTorch框架...詳情>>

            2023-10-15 00:05:17
            大數(shù)據(jù)測(cè)試工程師需要具備哪些技能?

            一、理解大數(shù)據(jù)概念大數(shù)據(jù)測(cè)試工程師需要理解大數(shù)據(jù)的基本概念和原理,如分布式存儲(chǔ)、MapReduce、實(shí)時(shí)計(jì)算等。他們還需要了解如何處理大規(guī)模的...詳情>>

            2023-10-14 23:43:03
            為什么SpringBoot的 jar 可以直接運(yùn)行?

            一、JAR文件的結(jié)構(gòu)與執(zhí)行方式Spring Boot的JAR包是Java Archive的縮寫(xiě),它是一種壓縮文件格式,可以將Java項(xiàng)目的類(lèi)文件、資源文件以及依賴庫(kù)等...詳情>>

            2023-10-14 23:01:49
            快速通道