這篇主要是寫給那些“爬蟲”技術門外漢看的科普文章。
我的爬蟲技術並不如何高深,但是給大家提供一點科普知識,應該還是夠用了。
最早的時候,我還不知道“爬蟲”到底是啥,感覺神祕極了,最早在 gayhub 上搜索 spider、crawler,看到很多開源項目,看得我頭都大了。
現在回過頭再來看這段經歷,如果當時能更好地理解“爬蟲”的概念,也許也不用如此辛苦。
爬蟲誕生的背景
讓我們舉個例子。
需求:我想跟蹤每個月出了什麼新書,並瞭解這些新書的詳細信息,比如題材、評分、價格等等,找到我喜歡的並完成下單。
原始解決方案:首先我需要定一個日程,避免自己忘了;然後我每週或者每個月打開一個電商網站的首頁,查看“新書”欄目,點進每一本書的介紹頁,遇到感興趣的就進行購買。
問題:非常多,我不一定能記得定期處理,更不一定能堅持定期處理,時間成本太高……
於是有一個聰明人就想:爲什麼不讓計算機幫我幹這個事情?所以爬蟲就誕生了。
什麼是爬蟲?
爬蟲就是一種程序,這種程序可以自動獲取網絡中信息,並進行處理
所以簡單講來,一個爬蟲程序主要有三大任務:
- 能夠進行網絡請求
- 獲取數據,並對數據進行結構化處理
- 將處理結果進行保存,甚至是展示
實際上所有搜索引擎都是通過爬蟲的方式,來記錄網站的,你通過百度 / 谷歌搜索到的結果,基本也是百度 / 谷歌自己的爬蟲抓取的,這種爬蟲通常會受到歡迎。
但是惡意爬蟲會造成網站所有者流量的耗散、服務器壓力激增、商業數據流失等諸多問題。
所以大部分網站都會針對性地指定一些策略來避免自己的網站的數據被爬蟲抓取。
反爬蟲程序應運而生,主要有兩個思路:
- 識別爬蟲請求,並讓爬蟲請求不成功
- 讓爬蟲獲取到無效數據,或者無法處理獲取到的數據
因此爬蟲程序又多個第四個任務:
- 反-反爬蟲
如何入門爬蟲?
入門爬蟲的過程,實際上就是了解這些知識的過程:
- 一種編程語言的基本語法,比如說 Python
- 網絡請求的相關知識,例如基本的 socket、https、header、cookie、請求方法等概念
- html、css、js 的相關知識
- 能夠通過 Chrome、Charles、WireShark 等工具,查看網頁代碼、網絡請求情況
- 一些數據存儲的知識,例如 CSV、json、數據庫等
如果你沒有學過 Python,下面的內容可能你會看不懂,最好先去看看 Python 的教程,這類教程有非常多。
我也把自己學習的過程做過記錄,可供參考:Python 學習從入門到放棄(一)-Python 基礎介紹
你的第一個爬蟲
這個爬蟲只有四行,實現了一個效果:獲取本機的外網 IP。
from urllib import request # 用於發起網絡請求的庫
response = request.urlopen("https://api.ipify.org") # 任務一:發起網絡請求
IP = response.read().decode('utf8') # 任務二:處理數據
print(IP) # 任務三:保存或展示數據
實際上這就是一個爬蟲,但是在絕大多數場景下,問題沒有這麼簡單,我們會分成幾篇文章來詳細說明。