Golang原生爬蟲 簡單爬蟲實現(xiàn) 不依賴第三方包庫 方便理解技術(shù)原理 (一)

探索技術(shù)的路上本應(yīng)該自己造輪子,即使市面上有再多的選擇,自己動手嘗試也是必要的,第一次嘗試必然會問題眾多,但你不覺得解決他是一件很有成就感的事情嗎,這樣才能帶給你更大的進步和更深刻的領(lǐng)悟。

如果沒有寫過的并感興趣的不妨一起來實現(xiàn)一下這個簡單的爬蟲。

其實用golang實現(xiàn)爬蟲是很簡單是事情,但也分情況,我們這次的文章就分享一種最簡單的爬蟲實現(xiàn)方式,用到的官方庫如下:

引用包

如果你能單單通過這些庫就想到該怎么做了,那你就很棒棒了。

為了讓程序能一直運行下去,我們首先要有一個源網(wǎng)頁,然后不斷爬抓記錄新的鏈接,記錄的手段有很多,比如存在數(shù)據(jù)庫、通過redis緩存、存在文本文件,最簡單的應(yīng)該就是存在數(shù)據(jù)庫了,這個看你們的技術(shù)偏向了。我打算把爬來的鏈接儲存在文本文件里。

首先,了解自己爬抓的目標(biāo),我準(zhǔn)備爬取所有的Golang相關(guān)答疑或者文章,然后翻來覆去很多網(wǎng)站都感覺不適合做源網(wǎng)址,然后靈機一動,百度一下

然后就用這樣作為源網(wǎng)址吧:百度一下 - Golang實現(xiàn)

有了源網(wǎng)址,那下面的事情只要捋順就好辦了。首先我們?yōu)榱俗ト〉芥溄樱枰粋€正則表達式

因為這個正則表達式我們后面可能會復(fù)用,所以可以存到一個全局變量里。

一個爬蟲如果不限制分秒爬抓次數(shù),那你的網(wǎng)絡(luò)肯定會受不了,如果電腦配置不行的話,電腦也會掛掉,所以我們需要寫一個計時器,golang已經(jīng)提供了計時器的包 => time

為什么要寫在一個Timer函數(shù)里?當(dāng)然是用來調(diào)用的 /手動滑稽

因為我們存在兩種情況,第一次爬取或不是第一次爬取的情況是做不同操作的。那要怎么判斷呢?因為我們的鏈接是儲存在txt文件里的,所以我們只需要去查txt文件是不是為空,如果為空就認(rèn)為他是第一次執(zhí)行程序,先訪問源網(wǎng)址,否則就按照文件里的鏈接依次訪問。

代碼如下:

那我們先看一下firstStart()函數(shù),稍后再解釋代碼:

很抱歉,沒有注釋習(xí)慣

其實很簡單,就是發(fā)起一個get請求,然后你會獲取到byte[]類型的數(shù)據(jù),轉(zhuǎn)換成string類型之后,就是網(wǎng)頁的代碼了。

分解一下(了解原理的跳過這段):

這段主要是發(fā)起一個get網(wǎng)絡(luò)請求,然后把請求到的byte數(shù)據(jù)轉(zhuǎn)成stirng類型的數(shù)據(jù),跳過正則獲取匹配鏈接獲取一個鏈接數(shù)組(不過分贅述,如果還不懂http請求可以另尋百度)

通過循環(huán)數(shù)組,首先對鏈接里的特殊符號做特出處理,然后通過checkRegexp函數(shù)做查重,就是防止有多個重復(fù)鏈接記錄導(dǎo)致浪費資源,最后存入txt文件。

checkRegexp函數(shù):

這里,程序的首次執(zhí)行已經(jīng)完成,并可以成功記錄爬取的鏈接了。程序執(zhí)行如下:

下一篇繼續(xù)講如何通過這些記錄的鏈接過濾無用爬取有效內(nèi)容,如果在上面的代碼中,還有疑問或發(fā)現(xiàn)驚天大Bug可以私聊


首發(fā)文來源:CSDN Golang原生爬蟲 簡單爬蟲實現(xiàn) 不依賴第三方包庫 方便理解技術(shù)原理 (一)

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

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評論 25 709
  • 33款可用來抓數(shù)據(jù)的開源爬蟲軟件工具 要玩大數(shù)據(jù),沒有數(shù)據(jù)怎么玩?這里推薦一些33款開源爬蟲軟件給大家。 爬蟲,即...
    visiontry閱讀 7,690評論 1 99
  • 你爬了嗎? 要玩大數(shù)據(jù),沒有數(shù)據(jù)怎么玩?這里推薦一些33款開源爬蟲軟件給大家。 爬蟲,即網(wǎng)絡(luò)爬蟲,是一種自動獲取網(wǎng)...
    Albert新榮閱讀 2,309評論 0 8
  • 這是我最近讀精英日課的感想 人類社會有三條鏈: 食物鏈 智識鏈 幸福鏈 知道這三條鏈,結(jié)合現(xiàn)今受人驅(qū)使的經(jīng)歷。我發(fā)...
    我的頭很方閱讀 197評論 0 2

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