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

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

網(wǎng)絡(luò)爬蟲工作流程
從web站點(diǎn)獲取資源分為三個(gè)步驟,即 “獲取網(wǎng)頁”、“提取信息”和“保存數(shù)據(jù)”。下面我們就以“獲取一張華為手機(jī)圖片”為例,來詳細(xì)講解這三個(gè)流程。
第一步,獲取網(wǎng)頁。我們?cè)谑止げ僮鲿r(shí)需要打開瀏覽器輸入華為的網(wǎng)址,或者搜索“華為手機(jī)”關(guān)鍵字,才可以定位到目的網(wǎng)頁。爬蟲在獲取網(wǎng)頁時(shí)是通過構(gòu)造一個(gè)請(qǐng)求并發(fā)送給服務(wù)器,然后由服務(wù)器給出響應(yīng),爬蟲接收的響應(yīng)是一個(gè)網(wǎng)頁源代碼,手工方式是通過瀏覽器解析出來的,所以爬蟲程序還需要將源代碼解析出來。
第二步,提取信息。手工的方式是通過肉眼的識(shí)別和人腦的分析,定位到目的圖片的位置,而爬蟲程序是根據(jù)網(wǎng)頁的規(guī)則,使用正則表達(dá)式將解析數(shù)據(jù)結(jié)構(gòu)中的Body部分,并獲取目的圖片。
第三步,保存數(shù)據(jù)。手工的方式是使用瀏覽器將圖片下載保存在個(gè)人電腦中,而爬蟲程序保存數(shù)據(jù)的方式多種多樣,可以簡(jiǎn)單保存為TXT文本或JSON文本,也可以保存到 數(shù)據(jù)庫 ,如MySQL和MongoDB等,還可保存至遠(yuǎn)程服務(wù)器,如借助SFTP進(jìn)行操作,甚至可以將圖片視頻保存在文件系統(tǒng)或者 對(duì)象存儲(chǔ) 中。
綜上所述,爬蟲就是代替我們來完成這份爬取工作的自動(dòng)化程序,它可以在抓取過程中進(jìn)行各種異常處理、錯(cuò)誤重試操作,確保爬取持續(xù)高效地運(yùn)行。
網(wǎng)絡(luò)爬蟲能做什么
網(wǎng)絡(luò)爬蟲的應(yīng)用場(chǎng)景可根據(jù)用途分為四類:搜索引擎,信息收集,數(shù)據(jù)分析,圖片抓取。
搜索引擎:如Google和百度,這類爬蟲會(huì)爬取整個(gè)互聯(lián)網(wǎng)的特定信息,并且分類、排序,然后用戶可以使用關(guān)鍵字進(jìn)行結(jié)果的搜索;
信息收集:如新聞資訊聚合,這類爬蟲會(huì)根據(jù)關(guān)鍵字搜索相關(guān)聯(lián)的新聞信息,聚合呈現(xiàn)給用戶;
數(shù)據(jù)分析:如商品價(jià)格比較和股票量化交易系統(tǒng),爬蟲可以針對(duì)相同的商品從多個(gè)電商平臺(tái)上獲取價(jià)格信息,綜合分析價(jià)格對(duì)比和價(jià)格趨勢(shì),為商品購買提供價(jià)格決策;
圖片抓取:抓取特定類型或者特定主題的圖片,可以用來個(gè)人收藏,也可用于AI圖像分析的圖片資源庫。我們今天要學(xué)習(xí)的,正是這一類。
Python網(wǎng)絡(luò)爬蟲技術(shù)原理及基礎(chǔ)
網(wǎng)絡(luò)爬蟲技術(shù)的原理涉及三部分:Python編程基礎(chǔ)、HTML網(wǎng)頁基礎(chǔ)、HTTP原理以及Requests庫,首先,我們既然要使用Python編寫爬蟲,自然要掌握Python的基礎(chǔ)編程知識(shí);其次,我們的爬蟲是從互聯(lián)網(wǎng)的網(wǎng)頁上抓取信息,所以要對(duì)目的網(wǎng)頁有一定的了解,即HTML網(wǎng)頁基礎(chǔ);最后,爬蟲程序要處理和web站點(diǎn)進(jìn)行的請(qǐng)求與響應(yīng),所以還要了解HTTP的通信原理以及Python中用來處理HTTP請(qǐng)求和響應(yīng)的Requests庫。
Python語言是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言,具有面向?qū)ο蠛徒忉屝哉Z言兩個(gè)重要特征。
面向?qū)ο笫窍鄬?duì)于面向過程而言的。比如C語言、Shell語言就是面向過程的,面向過程是一件事“該怎么做”,編程的時(shí)候把解決問題的步驟分析出來,然后用函數(shù)把這些步驟實(shí)現(xiàn);面向?qū)ο笫且环N以“對(duì)象”為中心的編程思想,把要解決的問題分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)對(duì)象在整個(gè)解決問題的步驟中的屬性和行為,面向?qū)ο笫且患?ldquo;該讓誰來做”,這個(gè)“誰”就是對(duì)象,他要怎么做是他自己的事,反正最后一群對(duì)象合力能把事做好就行了。至于解釋型語言,我們?cè)诰幊虝r(shí)使用的是高級(jí)語言,計(jì)算機(jī)不能直接理解高級(jí)語言,只能理解和運(yùn)行機(jī)器語言,所以必須要把高級(jí)語言翻譯成機(jī)器語言,計(jì)算機(jī)才能運(yùn)行高級(jí)語言所編寫的程序。解釋型語言的優(yōu)點(diǎn)是可跨平臺(tái)運(yùn)行,缺點(diǎn)則是運(yùn)行時(shí)需要源代碼,知識(shí)產(chǎn)權(quán)保護(hù)性差,運(yùn)行效率低。
至于Python的數(shù)據(jù)類型、變量、文件、語句、函數(shù)等知識(shí),囿于篇幅,不再贅述,感興趣的小伙伴可以去課程中學(xué)習(xí)。
HTML (Hypertext Markup Language)是一種用于創(chuàng)建網(wǎng)頁的超文本標(biāo)記語言,可以構(gòu)建web 站點(diǎn),HTML 運(yùn)行在瀏覽器上,由瀏覽器來解析。它的網(wǎng)頁結(jié)構(gòu)如下:

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

HTML標(biāo)簽
HTML 標(biāo)簽 (HTML tag)由尖括號(hào)包圍,通常是成對(duì)出現(xiàn)的,比如 <header> 和 </header>,<body>和</body>,在我們抓取圖片的爬蟲程序中,就需要獲得img標(biāo)簽后面的圖片url鏈接來下載圖片。
我們?cè)诰帉懪老x時(shí)構(gòu)建HTTP的請(qǐng)求并處理HTTP的響應(yīng),如果從零開始,效率非常低,所以就需要用到Python中的Request庫。Requests是一種常用的http請(qǐng)求庫,可以方便地發(fā)送http請(qǐng)求并處理響應(yīng)結(jié)果,極大地提高了效率。
如何在華為云上搭建python網(wǎng)絡(luò)爬蟲
Python網(wǎng)絡(luò)爬蟲既可以在本地運(yùn)行,也可以在云端運(yùn)行。相對(duì)于本地運(yùn)行方案,華為云上運(yùn)行爬蟲具有更多優(yōu)勢(shì):

華為云網(wǎng)絡(luò)爬蟲解決方案的優(yōu)勢(shì)
本地可以通過chrome瀏覽器對(duì)我們要爬取的網(wǎng)站進(jìn)行分析洞察,并基于此編寫Python爬蟲代碼,但是本地還需要搭建Python 集成開發(fā)環(huán)境 ;
華為云上運(yùn)行爬蟲程序可將爬取到的數(shù)據(jù)分為兩類,圖片存儲(chǔ)到OBS對(duì)象存儲(chǔ),文本存儲(chǔ)到RDS數(shù)據(jù)庫中。

華為云網(wǎng)絡(luò)爬蟲解決方案架構(gòu)
說了這么多,大家對(duì)于實(shí)驗(yàn)原理應(yīng)該都比較了解了,至于實(shí)驗(yàn)流程呢,簡(jiǎn)單總結(jié)為三個(gè)步驟:
第一步是洞察目標(biāo)網(wǎng)頁并且完成Python網(wǎng)絡(luò)爬蟲的編寫;
第二步是ECS運(yùn)行Python爬蟲并用RDS存儲(chǔ)文本數(shù)據(jù);
第三步是使用OBS存儲(chǔ)抓取的圖片。
看到這里,你一定會(huì)吐槽“這說得也太籠統(tǒng)了吧”。既然這么好奇,不如來 沙箱實(shí)驗(yàn)室 親自體驗(yàn)一下咯,畢竟實(shí)驗(yàn)的樂趣不是文字能夠描述出來的嘛~對(duì)于想要全面掌握Python網(wǎng)絡(luò)爬蟲圖片抓取技能的小伙伴,建議系統(tǒng)地學(xué)習(xí)課程,并通過實(shí)驗(yàn)和考試檢驗(yàn)自己的掌握情況。什么?你還不知道在哪里學(xué)習(xí)?當(dāng)然是在華為云學(xué)院啦,找到《使用Python爬蟲抓取圖片》這門微認(rèn)證就對(duì)了!