華為云計(jì)算 云知識(shí) 活用Python之網(wǎng)絡(luò)爬蟲(chóng)圖片抓取
活用Python之網(wǎng)絡(luò)爬蟲(chóng)圖片抓取

說(shuō)起Python,想必大家一定不陌生,作為時(shí)下大熱的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,大大小小網(wǎng)站的廣告欄、甚至是朋友圈,都充斥著Python學(xué)習(xí)的廣告,簡(jiǎn)直掀起了一場(chǎng)全民學(xué)Python的熱潮。不過(guò),Python熱門(mén)自然是有原因的,它免費(fèi)、開(kāi)源,可跨平臺(tái)運(yùn)行、不區(qū)分操作系統(tǒng),語(yǔ)法簡(jiǎn)潔清晰、易上手,語(yǔ)法表達(dá)優(yōu)美易讀,支持模塊和包,有極為豐富、功能強(qiáng)大的庫(kù),因此被廣泛應(yīng)用于人工智能、科學(xué)計(jì)算、圖形技術(shù)、動(dòng)畫(huà)、游戲等行業(yè)。我們今天要學(xué)習(xí)的網(wǎng)絡(luò)爬蟲(chóng)圖片抓取,就是它在人工智能領(lǐng)域中的應(yīng)用。

什么是網(wǎng)絡(luò)爬蟲(chóng)

什么是網(wǎng)絡(luò)爬蟲(chóng)

互聯(lián)網(wǎng)上的海量數(shù)據(jù)信息是存放在各類(lèi)web站點(diǎn)上的,web站點(diǎn)之間通過(guò)網(wǎng)絡(luò)互聯(lián),形成了一張巨大的網(wǎng)。如果我們把這張互聯(lián)網(wǎng)比作蜘蛛網(wǎng),那么一只蜘蛛沿著蜘蛛網(wǎng)爬取節(jié)點(diǎn)上的獵物,就相當(dāng)于爬蟲(chóng)程序沿著網(wǎng)絡(luò)連接在web站點(diǎn)上抓取數(shù)據(jù)。因此,網(wǎng)絡(luò)爬蟲(chóng)可以定義為一種從互聯(lián)網(wǎng)上抓取數(shù)據(jù)信息的 自動(dòng)化 程序。它的工作方式則是:web站點(diǎn)上各種網(wǎng)頁(yè),即url頁(yè)面,組成了互聯(lián)網(wǎng);爬蟲(chóng)程序與互聯(lián)網(wǎng)通信并獲取數(shù)據(jù),然后把抓取到的數(shù)據(jù)存儲(chǔ)起來(lái)。

網(wǎng)絡(luò)爬蟲(chóng)如何工作

網(wǎng)絡(luò)爬蟲(chóng)工作流程

網(wǎng)絡(luò)爬蟲(chóng)工作流程

從web站點(diǎn)獲取資源分為三個(gè)步驟,即 “獲取網(wǎng)頁(yè)”、“提取信息”和“保存數(shù)據(jù)”。下面我們就以“獲取一張華為手機(jī)圖片”為例,來(lái)詳細(xì)講解這三個(gè)流程。

第一步,獲取網(wǎng)頁(yè)。我們?cè)谑止げ僮鲿r(shí)需要打開(kāi)瀏覽器輸入華為的網(wǎng)址,或者搜索“華為手機(jī)”關(guān)鍵字,才可以定位到目的網(wǎng)頁(yè)。爬蟲(chóng)在獲取網(wǎng)頁(yè)時(shí)是通過(guò)構(gòu)造一個(gè)請(qǐng)求并發(fā)送給服務(wù)器,然后由服務(wù)器給出響應(yīng),爬蟲(chóng)接收的響應(yīng)是一個(gè)網(wǎng)頁(yè)源代碼,手工方式是通過(guò)瀏覽器解析出來(lái)的,所以爬蟲(chóng)程序還需要將源代碼解析出來(lái)。

第二步,提取信息。手工的方式是通過(guò)肉眼的識(shí)別和人腦的分析,定位到目的圖片的位置,而爬蟲(chóng)程序是根據(jù)網(wǎng)頁(yè)的規(guī)則,使用正則表達(dá)式將解析數(shù)據(jù)結(jié)構(gòu)中的Body部分,并獲取目的圖片。

第三步,保存數(shù)據(jù)。手工的方式是使用瀏覽器將圖片下載保存在個(gè)人電腦中,而爬蟲(chóng)程序保存數(shù)據(jù)的方式多種多樣,可以簡(jiǎn)單保存為T(mén)XT文本或JSON文本,也可以保存到 數(shù)據(jù)庫(kù) ,如MySQL和MongoDB等,還可保存至遠(yuǎn)程服務(wù)器,如借助SFTP進(jìn)行操作,甚至可以將圖片視頻保存在文件系統(tǒng)或者 對(duì)象存儲(chǔ) 中。

綜上所述,爬蟲(chóng)就是代替我們來(lái)完成這份爬取工作的自動(dòng)化程序,它可以在抓取過(guò)程中進(jìn)行各種異常處理、錯(cuò)誤重試操作,確保爬取持續(xù)高效地運(yùn)行。

網(wǎng)絡(luò)爬蟲(chóng)能做什么

網(wǎng)絡(luò)爬蟲(chóng)的應(yīng)用場(chǎng)景可根據(jù)用途分為四類(lèi):搜索引擎,信息收集,數(shù)據(jù)分析,圖片抓取。

搜索引擎:如Google和百度,這類(lèi)爬蟲(chóng)會(huì)爬取整個(gè)互聯(lián)網(wǎng)的特定信息,并且分類(lèi)、排序,然后用戶(hù)可以使用關(guān)鍵字進(jìn)行結(jié)果的搜索;

信息收集:如新聞資訊聚合,這類(lèi)爬蟲(chóng)會(huì)根據(jù)關(guān)鍵字搜索相關(guān)聯(lián)的新聞信息,聚合呈現(xiàn)給用戶(hù);

數(shù)據(jù)分析:如商品價(jià)格比較和股票量化交易系統(tǒng),爬蟲(chóng)可以針對(duì)相同的商品從多個(gè)電商平臺(tái)上獲取價(jià)格信息,綜合分析價(jià)格對(duì)比和價(jià)格趨勢(shì),為商品購(gòu)買(mǎi)提供價(jià)格決策;

圖片抓取:抓取特定類(lèi)型或者特定主題的圖片,可以用來(lái)個(gè)人收藏,也可用于AI圖像分析的圖片資源庫(kù)。我們今天要學(xué)習(xí)的,正是這一類(lèi)。

Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)原理及基礎(chǔ)

網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的原理涉及三部分:Python編程基礎(chǔ)、HTML網(wǎng)頁(yè)基礎(chǔ)、HTTP原理以及Requests庫(kù),首先,我們既然要使用Python編寫(xiě)爬蟲(chóng),自然要掌握Python的基礎(chǔ)編程知識(shí);其次,我們的爬蟲(chóng)是從互聯(lián)網(wǎng)的網(wǎng)頁(yè)上抓取信息,所以要對(duì)目的網(wǎng)頁(yè)有一定的了解,即HTML網(wǎng)頁(yè)基礎(chǔ);最后,爬蟲(chóng)程序要處理和web站點(diǎn)進(jìn)行的請(qǐng)求與響應(yīng),所以還要了解HTTP的通信原理以及Python中用來(lái)處理HTTP請(qǐng)求和響應(yīng)的Requests庫(kù)。

Python語(yǔ)言是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,具有面向?qū)ο蠛徒忉屝哉Z(yǔ)言?xún)蓚€(gè)重要特征。

面向?qū)ο笫窍鄬?duì)于面向過(guò)程而言的。比如C語(yǔ)言、Shell語(yǔ)言就是面向過(guò)程的,面向過(guò)程是一件事“該怎么做”,編程的時(shí)候把解決問(wèn)題的步驟分析出來(lái),然后用函數(shù)把這些步驟實(shí)現(xiàn);面向?qū)ο笫且环N以“對(duì)象”為中心的編程思想,把要解決的問(wèn)題分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)對(duì)象在整個(gè)解決問(wèn)題的步驟中的屬性和行為,面向?qū)ο笫且患?ldquo;該讓誰(shuí)來(lái)做”,這個(gè)“誰(shuí)”就是對(duì)象,他要怎么做是他自己的事,反正最后一群對(duì)象合力能把事做好就行了。至于解釋型語(yǔ)言,我們?cè)诰幊虝r(shí)使用的是高級(jí)語(yǔ)言,計(jì)算機(jī)不能直接理解高級(jí)語(yǔ)言,只能理解和運(yùn)行機(jī)器語(yǔ)言,所以必須要把高級(jí)語(yǔ)言翻譯成機(jī)器語(yǔ)言,計(jì)算機(jī)才能運(yùn)行高級(jí)語(yǔ)言所編寫(xiě)的程序。解釋型語(yǔ)言的優(yōu)點(diǎn)是可跨平臺(tái)運(yùn)行,缺點(diǎn)則是運(yùn)行時(shí)需要源代碼,知識(shí)產(chǎn)權(quán)保護(hù)性差,運(yùn)行效率低。

至于Python的數(shù)據(jù)類(lèi)型、變量、文件、語(yǔ)句、函數(shù)等知識(shí),囿于篇幅,不再贅述,感興趣的小伙伴可以去課程中學(xué)習(xí)。

HTML (Hypertext Markup Language)是一種用于創(chuàng)建網(wǎng)頁(yè)的超文本標(biāo)記語(yǔ)言,可以構(gòu)建web 站點(diǎn),HTML 運(yùn)行在瀏覽器上,由瀏覽器來(lái)解析。它的網(wǎng)頁(yè)結(jié)構(gòu)如下:

網(wǎng)絡(luò)爬蟲(chóng)解析網(wǎng)頁(yè)結(jié)構(gòu)

HTML網(wǎng)頁(yè)結(jié)構(gòu)

網(wǎng)絡(luò)爬蟲(chóng)解析HTML標(biāo)簽

HTML標(biāo)簽

HTML 標(biāo)簽 (HTML tag)由尖括號(hào)包圍,通常是成對(duì)出現(xiàn)的,比如 <header> 和 </header>,<body>和</body>,在我們抓取圖片的爬蟲(chóng)程序中,就需要獲得img標(biāo)簽后面的圖片url鏈接來(lái)下載圖片。

我們?cè)诰帉?xiě)爬蟲(chóng)時(shí)構(gòu)建HTTP的請(qǐng)求并處理HTTP的響應(yīng),如果從零開(kāi)始,效率非常低,所以就需要用到Python中的Request庫(kù)。Requests是一種常用的http請(qǐng)求庫(kù),可以方便地發(fā)送http請(qǐng)求并處理響應(yīng)結(jié)果,極大地提高了效率。

如何在華為云上搭建python網(wǎng)絡(luò)爬蟲(chóng)

Python網(wǎng)絡(luò)爬蟲(chóng)既可以在本地運(yùn)行,也可以在云端運(yùn)行。相對(duì)于本地運(yùn)行方案,華為云上運(yùn)行爬蟲(chóng)具有更多優(yōu)勢(shì):

華為云上運(yùn)行爬蟲(chóng)的優(yōu)勢(shì)

華為云網(wǎng)絡(luò)爬蟲(chóng)解決方案的優(yōu)勢(shì)

本地可以通過(guò)chrome瀏覽器對(duì)我們要爬取的網(wǎng)站進(jìn)行分析洞察,并基于此編寫(xiě)Python爬蟲(chóng)代碼,但是本地還需要搭建Python 集成開(kāi)發(fā)環(huán)境 ;

華為云上運(yùn)行爬蟲(chóng)程序可將爬取到的數(shù)據(jù)分為兩類(lèi),圖片存儲(chǔ)到OBS對(duì)象存儲(chǔ),文本存儲(chǔ)到RDS數(shù)據(jù)庫(kù)中。

華為云網(wǎng)絡(luò)爬蟲(chóng)解決方案架構(gòu)

華為云網(wǎng)絡(luò)爬蟲(chóng)解決方案架構(gòu)

說(shuō)了這么多,大家對(duì)于實(shí)驗(yàn)原理應(yīng)該都比較了解了,至于實(shí)驗(yàn)流程呢,簡(jiǎn)單總結(jié)為三個(gè)步驟:

第一步是洞察目標(biāo)網(wǎng)頁(yè)并且完成Python網(wǎng)絡(luò)爬蟲(chóng)的編寫(xiě);

第二步是ECS運(yùn)行Python爬蟲(chóng)并用RDS存儲(chǔ)文本數(shù)據(jù);

第三步是使用OBS存儲(chǔ)抓取的圖片。

看到這里,你一定會(huì)吐槽“這說(shuō)得也太籠統(tǒng)了吧”。既然這么好奇,不如來(lái) 沙箱實(shí)驗(yàn)室 親自體驗(yàn)一下咯,畢竟實(shí)驗(yàn)的樂(lè)趣不是文字能夠描述出來(lái)的嘛~對(duì)于想要全面掌握Python網(wǎng)絡(luò)爬蟲(chóng)圖片抓取技能的小伙伴,建議系統(tǒng)地學(xué)習(xí)課程,并通過(guò)實(shí)驗(yàn)和考試檢驗(yàn)自己的掌握情況。什么?你還不知道在哪里學(xué)習(xí)?當(dāng)然是在華為云學(xué)院啦,找到《使用Python爬蟲(chóng)抓取圖片》這門(mén)微認(rèn)證就對(duì)了!