小爬蟲峭竣,大世界——爬蟲其實(shí)很簡(jiǎn)單

今天講一講爬蟲。

如果把我們的互聯(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)書”就可以拉入群了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烈涮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子戈稿,更是在濱河造成了極大的恐慌讶舰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庐舟,居然都是意外死亡住拭,警方通過(guò)查閱死者的電腦和手機(jī)历帚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門杠娱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人禽拔,你說(shuō)我怎么就攤上這事室叉。” “怎么了茧痕?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵踪旷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我舀患,道長(zhǎng)彩掐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任狗超,我火速辦了婚禮朴下,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殴胧。我一直安慰自己,他們只是感情好竿屹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布拱燃。 她就那樣靜靜地躺著力惯,像睡著了一般召嘶。 火紅的嫁衣襯著肌膚如雪哮缺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天铛只,我揣著相機(jī)與錄音茎匠,去河邊找鬼。 笑死诵冒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侮东。 我是一名探鬼主播豹芯,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼铁蹈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了握牧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤览徒,失蹤者是張志新(化名)和其女友劉穎颂龙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躲叼,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡企巢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了流礁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罗丰。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萌抵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绍填,到底是詐尸還是另有隱情,我是刑警寧澤滔驶,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布卿闹,位于F島的核電站,受9級(jí)特大地震影響著角,放射性物質(zhì)發(fā)生泄漏旋恼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一产徊、第九天 我趴在偏房一處隱蔽的房頂上張望冬殃。 院中可真熱鬧,春花似錦审葬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸦难,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間合蔽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工沃斤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刃宵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓哮针,卻偏偏與公主長(zhǎng)得像从隆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寿烟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你筛武,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料挎塌? 從這篇文章中你...
    hw1212閱讀 12,699評(píng)論 2 59
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • 1榴都、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,969評(píng)論 3 119
  • 小寶最近很煩惱,整天哀聲嘆氣的竿音,就像株發(fā)蔫的蒜苗拴驮,丟了魂兒似的春瞬。工作錯(cuò)誤頻發(fā)套啤,也不像以前活波跳騰了√蜒模看他這...
    探路人閱讀 198評(píng)論 0 3
  • 在這里和家一樣,一樣溫暖钞楼,一樣快樂(lè)袄琳,一樣幸福,一樣具備著避風(fēng)的港灣唆樊。我在這里生活了三年刻蟹,在廣設(shè)2班生活了三年,在這...
    宇焉知魚之樂(lè)閱讀 359評(píng)論 0 2