今天講一講爬蟲。
如果把我們的互聯(lián)網(wǎng)比作是一個(gè)蜘蛛網(wǎng)晃虫,那么爬蟲就是在網(wǎng)上爬來(lái)爬去的蜘蛛皆撩。蜘蛛通過(guò)網(wǎng)頁(yè)之間的鏈接,一個(gè)一個(gè)頁(yè)面的讀取內(nèi)容哲银,一直這么做下去扛吞,一直到整個(gè)網(wǎng)頁(yè)都讀完為止。
爬蟲能做的事情非常多荆责,我們知道的搜索引擎Baidu滥比,就是利用爬蟲把互聯(lián)網(wǎng)上的內(nèi)容全部抓取了下來(lái)。爬蟲除了可以用來(lái)做搜索引擎做院,還可以幫助我們?nèi)粘I詈凸ぷ髦械暮芏嗍虑槊し骸1热缒愦蛩阗I房,那么就可以用爬蟲把鏈家上面的房源全部抓下來(lái)键耕;比如你喜歡某個(gè)明星寺滚,你也可以用爬蟲把關(guān)于他的所有信息都第一時(shí)間抓下來(lái);你可以把豆瓣上的書和電影都抓下來(lái)…
一個(gè)小小的爬蟲郁竟,能帶我們發(fā)現(xiàn)大的世界玛迄。
爬蟲這么強(qiáng)大,那今天皮哥就來(lái)具體講一講怎么寫一個(gè)爬蟲棚亩。
為了大家學(xué)得有激情蓖议,皮哥“精心”挑選了一個(gè)網(wǎng)站作為例子,這是一個(gè)美女圖片的網(wǎng)站讥蟆,后面我們講到更高階的內(nèi)容的時(shí)候勒虾,還會(huì)用比如豆瓣這樣的知名網(wǎng)站作為示例。
網(wǎng)站:http://www.ugirls.com/Content/
我們的目標(biāo)是用爬蟲自動(dòng)把頁(yè)面上所有的美女圖片抓取下來(lái)瘸彤,接下來(lái)修然,我們一步一步來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。
第一步
打開目標(biāo)網(wǎng)站的頁(yè)面,點(diǎn)擊查看“源代碼”愕宋,我們看到的是密密麻麻的代碼玻靡,這就是我們上節(jié)課介紹的HTML代碼,幾乎所有的網(wǎng)頁(yè)都是用這門語(yǔ)言寫的中贝。我們上網(wǎng)看到的是絢麗多彩的網(wǎng)頁(yè)囤捻,但是對(duì)于Python程序來(lái)說(shuō),它看到的就是密密麻麻的HTML代碼邻寿,對(duì)Python爬蟲來(lái)說(shuō)蝎土,網(wǎng)頁(yè)就是這樣的代碼塊。
那么绣否,我們?cè)趺礃幽軌蜃孭ython爬蟲程序自動(dòng)去訪問(wèn)我們的目標(biāo)頁(yè)面呢誊涯?下面這段代碼可以做到。
可以看到蒜撮,最后我們打印code和content兩個(gè)值暴构,code指的是訪問(wèn)http的狀態(tài)碼,我們?cè)谏弦还?jié)課有提到段磨,200表示訪問(wèn)正常丹壕,然后content就是返回的爬蟲所看到的頁(yè)面代碼塊。
這里我們用到了requests這個(gè)python的庫(kù)薇溃,這是一個(gè)非常強(qiáng)大好用的庫(kù),用它來(lái)發(fā)送網(wǎng)絡(luò)請(qǐng)求非常簡(jiǎn)單缭乘。在幾乎所有python爬蟲程序里沐序,我們都能看到它的身影。更詳細(xì)的資料堕绩,可以查閱中文官方文檔:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html策幼。
第二步
我們已經(jīng)讓爬蟲能夠自動(dòng)訪問(wèn)目標(biāo)頁(yè)面了,接下來(lái)我們需要讓爬蟲程序自動(dòng)在HTML代碼里面找到美女圖片的標(biāo)簽奴紧,要時(shí)刻記住特姐,對(duì)于我們來(lái)說(shuō),頁(yè)面是絢爛多彩的黍氮,但是對(duì)于程序來(lái)說(shuō)唐含,它“看到”的是一大片代碼。所以教程序怎么去找到需要的信息沫浆,這是在寫任何爬蟲時(shí)都非常非常關(guān)鍵的一個(gè)步驟捷枯。HTML代碼太雜亂無(wú)章,我們要告訴程序怎么去定位到需要的信息专执,這樣我們才能把它剝離出來(lái)淮捆。在今天的課程中,我們要定位的就是圖片。
我們知道攀痊,跟圖片相關(guān)的標(biāo)簽是<img>桐腌,那我們可以借助瀏覽器的ctr+f快捷鍵快速找到<img>標(biāo)簽所在的位置。
在以后寫爬蟲的時(shí)候苟径,我們可能還會(huì)遇到要在諸如<span>案站、<div>等標(biāo)簽里面定位需要的信息,而這樣的標(biāo)簽在頁(yè)面上太多涩笤,需要定位到一個(gè)更小的范圍來(lái)查找標(biāo)簽嚼吞。
下面這段代碼展示了如何定位到需要的<img>標(biāo)簽。
大家可以看到蹬碧,我們成功的定位到了所需要的圖片舱禽,一共是10張圖片。跟我們?cè)诰W(wǎng)頁(yè)上看到的數(shù)目完全吻合恩沽。然后我們分別把10張圖都打印出來(lái)誊稚,我們注意到,對(duì)爬蟲程序來(lái)說(shuō)罗心,打印的是10個(gè)<img>標(biāo)簽對(duì)象里伯。
我們?cè)谶@里用到了BeautifulSoup這個(gè)python庫(kù),這又是一個(gè)非常強(qiáng)大渤闷,也會(huì)經(jīng)常用到的Python庫(kù)疾瓮,BeautifulSoup能讓爬蟲程序非常方便的從HTML里面提取需要的數(shù)據(jù),我們已經(jīng)在上面的示例中見識(shí)到它的威力飒箭,接下來(lái)的爬蟲之旅中狼电,我們還會(huì)繼續(xù)用到它的。更詳細(xì)的中文文檔弦蹂,可以查閱這里:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html肩碟。
第三步
我們已經(jīng)成功教程序定位到需要的標(biāo)簽上凸椿,接下來(lái)就是最后一步,讓Python爬蟲程序自動(dòng)地把這些圖片下載下來(lái)脑漫。從上一步的打印結(jié)果來(lái)看,我們發(fā)現(xiàn)<img>標(biāo)簽里面有一個(gè)src的屬性窿撬,我們復(fù)制其中一個(gè)src屬性启昧,在新的瀏覽器窗口打開劈伴,發(fā)現(xiàn)正是一張美女圖片密末。<img>的src屬性,標(biāo)明的正是這張圖片的地址严里。
所以新啼,要讓程序能夠自動(dòng)下載圖片,跟程序自動(dòng)訪問(wèn)頁(yè)面一樣刹碾,我們讓程序自動(dòng)去訪問(wèn)這些圖片地址。要記住的是物舒,人類看到的圖片是美麗多彩的戏锹,但是對(duì)于程序來(lái)說(shuō),圖片也跟網(wǎng)頁(yè)差不多锦针,是一串串的代碼組成的,在程序的世界里悉盆,任何東西都差不多由代碼組成馋吗,(心疼程序一秒鐘)。不過(guò)現(xiàn)在的人工智能發(fā)展迅速宏粤,已經(jīng)達(dá)到了教會(huì)Python程序從這一大片的代碼里面識(shí)別哪些是美女的圖片,哪些是帥哥的圖片了。
下面這段代碼展示了怎么教程序自動(dòng)去下載圖片芥玉。
程序依次訪問(wèn)圖片地址灿巧,然后把讀取到的一串代碼,保存成圖片文件抠藕,在這里盾似,我們用<img>標(biāo)簽的alt屬性作為保存圖片的名稱敬辣。然后,我們打開圖片文件村刨,就會(huì)發(fā)現(xiàn)圖片已經(jīng)下載成功了撰茎。
小結(jié)
所以,綜合前面的步驟逆粹,我們教給Python程序的工作包括:
1. 自動(dòng)“訪問(wèn)”我們打開的頁(yè)面炫惩;
2. 自動(dòng)定位找到所有的美女圖片;
3. 把圖片下載保持起來(lái)奢方。
把每一步的工作合到一起爸舒,我們就完整的完成了一個(gè)最基本的Python爬蟲程序。
后記
今天皮哥講解了如何寫一個(gè)基本的爬蟲鹊奖,麻雀雖小五臟俱全涂炎,這個(gè)簡(jiǎn)單的爬蟲程序,其實(shí)已經(jīng)包含了一個(gè)爬蟲所需要的大部分成分唱捣。
我們可以修改這個(gè)爬蟲程序震缭,去爬取更復(fù)雜更豐富的頁(yè)面,比如爬取“豆瓣電影”拣宰、“新浪微博”、“鏈家網(wǎng)”等等膛堤。然后可以基于這些爬取的數(shù)據(jù)做更多有趣的事情晌该。
偷偷的說(shuō)一句绿渣,上面提到的這三個(gè)著名網(wǎng)站次企,皮哥都爬過(guò),數(shù)據(jù)那是相當(dāng)?shù)膇nteresting爸鄄琛堵第!
============================================================
我創(chuàng)建了一個(gè)python技術(shù)交流的圈子,方便大家交流討論技術(shù)踏志,以及交流求職經(jīng)驗(yàn)和內(nèi)推信息。
社群是免費(fèi)的饲鄙,免費(fèi)的圆雁,免費(fèi)的,大家加我的微信之后(個(gè)人信息里面可以找到)轴咱,注明“簡(jiǎn)書”就可以拉入群了~