寫給青少年的網(wǎng)頁爬蟲學(xué)習(xí)指南

少兒編程 Python 爬蟲

注意,這是一篇寫給青少年的入門指南璧微。
我們不會做非常深入的探討作箍,而是淺嘗輒止,給初學(xué)者描繪一個概貌和入門指引前硫。

緣起

那一天胞得,人們終于回想起了被爬蟲所支配的恐懼

2019元旦期間,有位同學(xué)報名學(xué)習(xí) Python屹电,上來就問了我一個問題阶剑,“什么時候可以開始學(xué)習(xí)爬蟲呢?”

老師當(dāng)時就被震驚了∥:牛現(xiàn)在的小朋友果然不可以低估啊牧愁。要知道貓老師本貓都還沒實際操作過爬蟲呢。而00后10后已經(jīng)在以此為目標(biāo)了葱色。我不禁想問递宅,這位少年,看你骨骼清奇苍狰,我這里有一本金牌黑客秘籍要不要看下办龄?

玩笑歸玩笑。有明確目標(biāo)的學(xué)習(xí)淋昭,效果會是出類拔萃的俐填。雖然貓老師之前并未專門對這項技術(shù)的教學(xué)做過準(zhǔn)備,但是只要同學(xué)有需要翔忽,我們就不會被問題難住英融。教學(xué)相長,為了不辜負(fù)同學(xué)們的期望歇式,我們決定從制作一個例子開始驶悟。

什么是爬蟲

網(wǎng)絡(luò)爬蟲(crawler),又被稱為蜘蛛(spider)材失。是一種可以根據(jù)某種設(shè)定的規(guī)則自動運行痕鳍,抓取互聯(lián)網(wǎng)上的信息的程序。我們經(jīng)常使用的百度龙巨、必應(yīng)笼呆、谷歌這些搜索引擎,它們背后的重要支撐旨别,就是網(wǎng)絡(luò)爬蟲诗赌。這些爬蟲不知疲倦地抓取網(wǎng)站的信息并加以綜合整理,最終成為幫助我們快速檢索需要的信息的利器秸弛。

從這個簡單的描述铭若,我們就可以知道洪碳,一個爬蟲至少需要三個要素:

  1. 抓取信息
  2. 數(shù)據(jù)存儲和整理
  3. 數(shù)據(jù)呈現(xiàn)

這幾個方面,每一個點都可以引申更多更深入的技術(shù)奥喻,值得數(shù)十年如一日地潛心研究偶宫。我們沒有辦法一一介紹,這一點你只要想象一下這些搜索引擎公司环鲤,為什么能憑借這個技術(shù)成長為互聯(lián)網(wǎng)巨頭就明白了纯趋。

但是作為初學(xué)者,想通過一些簡單的學(xué)習(xí)冷离,大致了解爬蟲的工作原理吵冒,甚至做一些簡單的爬蟲應(yīng)用,還是有可能的西剥。

爬蟲的基本工作原理

同學(xué)們可能已經(jīng)了解痹栖,互聯(lián)網(wǎng)是通過超鏈接(URL)訪問和相互聯(lián)系的。比如新聞門戶網(wǎng)站上就排布著大量隱藏在新聞標(biāo)題背后的超鏈接瞭空。

想象一下揪阿,整個互聯(lián)網(wǎng)就好比是一張……啊不對,是很多很多張通過各種方式連接在一起的蜘蛛網(wǎng)∨匚罚現(xiàn)在假設(shè)你是一只蜘蛛南捂,把你放在網(wǎng)上,需要把所有的蛛絲都走過一遍(看一遍所有網(wǎng)頁)旧找,要怎么做呢溺健?

首先,我們先隨便從什么地方開始钮蛛,爬過一根蛛絲鞭缭,遇到分叉就按照某種規(guī)則選擇其中一條。按照這種方式不停爬行魏颓,遲早有一天岭辣,整個網(wǎng)絡(luò)都會被蜘蛛爬過一遍。

這就是爬蟲的基本工作原理甸饱,也是爬蟲為什么叫爬蟲(或者蜘蛛)的原因易结。

網(wǎng)絡(luò)爬蟲跟這只蜘蛛的區(qū)別在于,爬過的地方需要有地方存儲它看到的信息柜候。通常,由于這些信息非常龐大躏精,我們需要使用數(shù)據(jù)庫來進行存儲渣刷。

除了這種通用的爬蟲,還有一些有特定目標(biāo)的爬蟲矗烛,比如在網(wǎng)絡(luò)購物時辅柴,可能會需要用到的比價網(wǎng)站箩溃,就是通過爬蟲,抓取所有購物網(wǎng)站的信息碌嘀,對相同商品同一時間不同網(wǎng)站的價格涣旨,或者歷史價格進行對比和分析。

所以爬蟲技術(shù)也是大數(shù)據(jù)的基礎(chǔ)之一股冗。由此可見霹陡,如何對抓取到的數(shù)據(jù)進行存儲、整理止状、分析和最終的呈現(xiàn)烹棉,也非常重要。

實現(xiàn)爬蟲需要的能力怯疤、工具及學(xué)習(xí)路徑

知道了爬蟲的基本工作原理浆洗,用Python去實現(xiàn)它需要什么工具也就大體有些概念了。

  • 編程基礎(chǔ)知識
    • Python 編程基礎(chǔ)
    • Python 網(wǎng)絡(luò)編程
    • Python 模塊使用
    • 數(shù)據(jù)結(jié)構(gòu)和算法
  • Web 開發(fā)基本知識
    • HTML/DOM
    • CSS
    • JavaScript
  • 正則表達式
  • 數(shù)據(jù)庫基礎(chǔ)
  • ……

需要指出的是 Python 并非制作爬蟲的唯一選擇集峦。你其實可以用任何喜歡的語言來實現(xiàn)伏社。只是現(xiàn)階段用 Python 來實現(xiàn)爬蟲非常有利。一是因為 Python 的語法簡潔易懂塔淤;二是已經(jīng)有很多摘昌、很好用的專為 Python 爬蟲設(shè)計的第三方模塊(什么是模塊,我們會在 Python 中級課程中講授)凯沪。

Python 的學(xué)習(xí)路徑第焰,貓老師已經(jīng)在《Python 是個什么東西?》有簡單說明妨马。有興趣的同學(xué)可以回顧一下挺举。簡單來說就是首先學(xué)基礎(chǔ)的語法,然后包含數(shù)據(jù)結(jié)構(gòu)和算法的高級特性烘跺,接下來湘纵,針對性學(xué)習(xí)爬蟲所需的具體技術(shù)和模塊。

例子程序:最右神回復(fù)

有一個知名問答網(wǎng)站滤淳,網(wǎng)友們可以在上面提出任何你想問的問題梧喷,然后就會有熱心的或者內(nèi)行的網(wǎng)友認(rèn)真書寫回答。

在這些回答中脖咐,有一些短小精悍铺敌,回味無窮的回復(fù),被網(wǎng)友們戲稱“神回復(fù)”屁擅。

我們這一次的例子偿凭,就以它為“下手”的目標(biāo)。通過一個爬蟲派歌,來方便的匯總這些“神回復(fù)”弯囊。

這個爬蟲屬于定向聚焦爬蟲痰哨。針對特定網(wǎng)站,特定目的匾嘱。于是我們需要找到初始頁面斤斧、根據(jù)規(guī)則抓取答案、對答案進行篩選和存儲霎烙、通過小程序進行前端呈現(xiàn)撬讽。

爬蟲部分,因為非常簡單吼过,我們沒有使用著名的 Scrapy 庫锐秦,而是用相對較輕的 requests 庫來執(zhí)行 url 請求,用 lxml 庫及正則表達式來解析抓取到的網(wǎng)頁盗忱,并用 pymongo 進行數(shù)據(jù)存儲和整理酱床。

前端呈現(xiàn),我們制作了一個微信小程序趟佃。這里又涉及了 WebApp扇谣、HTML/CSS、RestApi闲昭、Hash 等等知識罐寨。好在這不是我們的重點,你也完全可以不去考慮序矩,僅僅在自己的個人電腦上輸出數(shù)據(jù)鸯绿,開心就好。

當(dāng)然簸淀,也許有一天我們也會開始介紹如何進行前端的實現(xiàn)瓶蝴。在這里,就先簡單地體驗一下吧租幕。

小結(jié)

這個小程序的最初版本舷手,Jason老師和貓老師兩個人花了大約兩天時間,分別寫出了前端(小程序)和后端(爬蟲)劲绪。其中男窟,爬蟲部分的核心部分不超過一百行 Python 代碼。但是贾富,初學(xué)者仍需要從最基本的知識和概念學(xué)習(xí)歉眷,方能理解那短短幾十行代碼究竟干了些什么。

真正實用的爬蟲颤枪,還需要考慮很多問題姥芥。比如,面對大量網(wǎng)站海量數(shù)據(jù)汇鞭,如何提高抓取的效率凉唐;如何并行處理和存儲;如何避免重復(fù)抓取霍骄,同時減少遺漏台囱;如何將抓取的信息結(jié)構(gòu)化存儲;如何降低存儲空間并提高查詢性能和效率……不要怕读整,科技就是在不斷發(fā)現(xiàn)簿训、提問、研究米间、解決强品、迭代的過程中不斷進步的。我們的學(xué)習(xí)也是一樣屈糊。

最后的榛,祝所有想要學(xué)習(xí)爬蟲的同學(xué)都能早日實現(xiàn)自己的爬蟲程序。
但是千萬要注意逻锐,請合理夫晌、合法地使用爬蟲,并避免大量高頻訪問某個網(wǎng)站昧诱,不然不要怪老師沒有警告你會被封IP晓淀、封賬號哦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盏档,一起剝皮案震驚了整個濱河市凶掰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜈亩,老刑警劉巖懦窘,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異勺拣,居然都是意外死亡奶赠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門药有,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毅戈,“玉大人,你說我怎么就攤上這事愤惰∥” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵宦言,是天一觀的道長扇单。 經(jīng)常有香客問我,道長奠旺,這世上最難降的妖魔是什么蜘澜? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任施流,我火速辦了婚禮,結(jié)果婚禮上鄙信,老公的妹妹穿的比我還像新娘瞪醋。我一直安慰自己,他們只是感情好装诡,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布银受。 她就那樣靜靜地躺著,像睡著了一般鸦采。 火紅的嫁衣襯著肌膚如雪宾巍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天渔伯,我揣著相機與錄音顶霞,去河邊找鬼。 笑死咱旱,一個胖子當(dāng)著我的面吹牛确丢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吐限,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鲜侥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诸典?” 一聲冷哼從身側(cè)響起描函,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狐粱,沒想到半個月后舀寓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肌蜻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年互墓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋搜。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡篡撵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豆挽,到底是詐尸還是另有隱情育谬,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布帮哈,位于F島的核電站膛檀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咖刃,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一泳炉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嚎杨,春花似錦胡桃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽容贝。三九已至自脯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斤富,已是汗流浹背膏潮。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留满力,地道東北人焕参。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像油额,于是被迫代替她去往敵國和親叠纷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351