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

少兒編程 Python 爬蟲

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

緣起

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

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

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

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

什么是爬蟲

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

從這個(gè)簡單的描述,我們就可以知道,一個(gè)爬蟲至少需要三個(gè)要素:

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

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

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

爬蟲的基本工作原理

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

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

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

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

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

除了這種通用的爬蟲,還有一些有特定目標(biāo)的爬蟲,比如在網(wǎng)絡(luò)購物時(shí),可能會(huì)需要用到的比價(jià)網(wǎng)站,就是通過爬蟲,抓取所有購物網(wǎng)站的信息,對(duì)相同商品同一時(shí)間不同網(wǎng)站的價(jià)格,或者歷史價(jià)格進(jìn)行對(duì)比和分析。

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

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

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

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

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

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

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

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

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

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

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

爬蟲部分,因?yàn)榉浅:唵?,我們沒有使用著名的 Scrapy 庫,而是用相對(duì)較輕的 requests 庫來執(zhí)行 url 請(qǐng)求,用 lxml 庫及正則表達(dá)式來解析抓取到的網(wǎng)頁,并用 pymongo 進(jìn)行數(shù)據(jù)存儲(chǔ)和整理。

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

當(dāng)然,也許有一天我們也會(huì)開始介紹如何進(jìn)行前端的實(shí)現(xiàn)。在這里,就先簡單地體驗(yàn)一下吧。

小結(jié)

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容