前言:
? ? ? ? 先簡單說一說本人寫這篇文章的初衷襟铭,自我覺得之前學東西的深度以及效率一直不高薄货,偶然之間看到一種邊學邊寫的方法翁都,于是想著借鑒一下,因此我才想開一個這樣的專欄谅猾,一方面是記錄我的學習過程柄慰;另一方面鳍悠,也是分享出來供大家一起學習交流。(P.S.這是我第一次寫文章哈哈坐搔,萌新求照)藏研。
? ? ? ? 這第一篇,我不想直接寫requests庫概行,bs4庫之類的方法蠢挡,這些方法是死的,既然是開始就要把基礎(chǔ)打牢是吧凳忙。所以接下來我將盡可能精要地介紹一些HTTP基本原理业踏,爬蟲基本原理,以及Cookies的基本原理涧卵,并且在最后帶大家做一次最簡單的爬取勤家。
1)HTTP基本原理:
? ? ? ? HTTP的全稱是Hyper Text Transfer Protocol(超文本傳輸協(xié)議),用于從網(wǎng)絡傳輸超文本數(shù)據(jù)到本地瀏覽器的傳送協(xié)議柳恐。 爬蟲中經(jīng)常抓取的頁面通常就是http或https協(xié)議的伐脖。HTTPS是HTTP下加入SSL層,簡單來說就是HTTP的安全版乐设。
? ? ? ? HTTP的請求過程就是一個request-response的過程:用戶/瀏覽器 向網(wǎng)站所在服務器發(fā)送請求讼庇,服務器收到后進行處理和解析,并以文件形式傳回給用戶/瀏覽器近尚。
? ? ? ? 最主要的請求方式由GET與POST兩種方式:GET:請求中的參數(shù)會出現(xiàn)在url中蠕啄,提交的數(shù)據(jù)最多1024字節(jié) ; POST:請求參數(shù)會包裝在請求體中,故通常在表單提交時使用肿男,提交的數(shù)據(jù)大小沒有限制介汹。
? ? ? ? 響應則包括三個部分:響應狀態(tài)碼(Response Status Code)却嗡、響應頭(Response Headers)和響應體(Response Body)舶沛。? 需要稍微了解一下常見的狀態(tài)碼:200(成功),404(服務器中找不到資源)窗价,400(錯誤請求)以及500(服務器內(nèi)部錯誤)等如庭。
2)爬蟲基本原理:
? ? ? ? 簡而言之,爬蟲就是獲取網(wǎng)頁并提取和保存信息的自動化程序撼港。
? ? ? ? ? ? Step1 ---獲取網(wǎng)頁:就是要獲取網(wǎng)頁的源代碼(html代碼)坪它,Python中提供了許多庫來幫助我們實現(xiàn)HTTP請求來獲取網(wǎng)頁,比如urllib帝牡,requests庫等往毡。
? ? ? ? ? ? Step2 ---提取信息:拿到一整個網(wǎng)頁,但總不會整個內(nèi)容都是自己需要的吧靶溜,這里就需要提取出自己關(guān)心的內(nèi)容开瞭。有一個萬能的方法就是利用正則表達式進行匹配懒震,但是它較難構(gòu)造且效率不高,所以我們往往使用其他的方法來進行(如Beautiful Soup, XPath, pyquery等)嗤详,這一部分也是最花時間的一步个扰。
? ? ? ? ? ? Step3 ---保存數(shù)據(jù):通常我們可以僅用兩行代碼,將信息保存到文件中葱色。大量的數(shù)據(jù)也可以保存到數(shù)據(jù)庫中递宅,如MySQL和MongoDB等。
? ? ? ? ? ? Step4 ---自動化程序:自動化也就是利用爬蟲代替人的工作苍狰。自動化的過程通常會使用多線程來加速爬取的過程办龄。
3)Cookies的基本原理:
? ? ? ? 首先不妨來想一想這樣一件事,你登陸了簡書的賬號淋昭,關(guān)閉瀏覽器土榴,再打開的時候就不需要登陸了。這是如何做到的呢响牛?在解釋之前玷禽,還要了解HTTP的一個特點:無狀態(tài)。這就意味著HTTP協(xié)議對事務處理是沒有記憶的呀打。
? ? ? ? 由于HTTP本身不能提供這種保存登陸的實現(xiàn)矢赁,所以會話(session)和Cookies技術(shù)就應運而生了。Coolies保存了登陸的憑證贬丛,有了它撩银,下次就不需要重新輸入賬號密碼來登陸了。Cookie分為兩種級別豺憔,一種是會話級额获,另一種是持久級。會話可以理解是一次打開瀏覽器恭应,關(guān)閉瀏覽器那么一次會話就“結(jié)束”了抄邀。
? ? ? ? 會話級Cookie將Cookie保存在瀏覽器內(nèi)存中,瀏覽器關(guān)閉后Cookie就失效了(注意區(qū)別:session是存在與服務器中的昼榛,并不會消失境肾,只是因為會話級的Cookie失效了,無法找到對應SessionID的session胆屿,所以會話也就無法進行下去了)奥喻;持久級Cookie將Cookie保存在硬盤中,保存的時間可以通過程序自己定義非迹,過期才會失效环鲤,實現(xiàn)了一種持久化的解決方案。
小試牛刀:
????????這一基礎(chǔ)篇主要給新手們理解一下基本的概念憎兽,可能也略顯乏味冷离,最后呢结闸,做一個最簡單的爬取(也可以跳過酒朵,直接看下篇文章)桦锄。
? ? ? ? 我們來實現(xiàn)一個IP地址自動查詢。IP138網(wǎng)站(http://www.ip138.com)為我們提供了一個天然的接口蔫耽,就拿它下刀吧结耀。我們先在網(wǎng)站上輸入一個ip,看看有什么發(fā)生(以Google免費DNS為例:8.8.8.8)匙铡,發(fā)現(xiàn)網(wǎng)址變成了這樣
? ? ? ? 猜想图甜,是不是ip后面接一個符合條件的IP就能直接查詢呢? 于是我們就利用這樣的一個關(guān)鍵字接口來寫程序了鳖眼。(發(fā)現(xiàn)復制代碼不方便黑毅,直接貼圖了)
? ? ? ? 因為還沒有將后面的知識,所以這里只是返回整個html頁面钦讳,在通過切片截取出有用的部分矿瘦。這樣就能得到想要的結(jié)果了。
結(jié)語:
????????謝謝大家閱讀愿卒,希望能對你有所幫助缚去,我也會加緊學習的步伐繼續(xù)下去。現(xiàn)在僅僅是開始琼开,精彩永遠在路的盡頭易结。共勉吧。