(一)爬蟲基礎

Python爬蟲筆記(一)
前言:
先簡單說一說本人寫這篇文章的初衷,自我覺得之前學東西的深度以及效率一直不高,偶然之間看到一種 邊學邊寫 的方法,於是想著借鑑一下,因此我才想開一個這樣的專欄,一方面是記錄我的學習過程;另一方面,也是分享出來供大家一起學習交流。(P.S.這是我第一次寫文章哈哈,萌新求照)。
這第一篇,我不想直接寫requests庫,bs4庫之類的方法,這些方法是死的,既然是開始就要把基礎打牢是吧。所以接下來我將盡可能精要地介紹一些 HTTP基本原理,爬蟲基本原理,以及Cookies的基本原理,並且在最後帶大家做一次最簡單的爬取。
1)HTTP基本原理:
HTTP的全稱是Hyper Text Transfer Protocol(超文字傳輸協議),用於從網路傳輸超文字資料到本地瀏覽器的傳送協議。 爬蟲中經常抓取的頁面通常就是http或https協議的。HTTPS是HTTP下加入SSL層,簡單來說就是HTTP的安全版。
HTTP的請求過程就是一個 request-response 的過程:使用者/瀏覽器 向網站所在伺服器傳送請求,伺服器收到後進行處理和解析,並以檔案形式傳回給使用者/瀏覽器。
最主要的請求方式由GET與POST兩種方式:GET:請求中的引數會出現在url中,提交的資料最多1024位元組 ; POST:請求引數會包裝在請求體中,故通常在表單提交時使用,提交的資料大小沒有限制。
響應則包括三個部分:響應狀態碼(Response Status Code)、響應頭(Response Headers)和響應體(Response Body)。 需要稍微瞭解一下常見的狀態碼:200(成功),404(伺服器中找不到資源),400(錯誤請求)以及500(伺服器內部錯誤)等。
2)爬蟲基本原理:
簡而言之,爬蟲就是 獲取網頁並提取和儲存資訊的自動化程式 。
Step1 ---獲取網頁 :就是要獲取網頁的原始碼(html程式碼),Python中提供了許多庫來幫助我們實現HTTP請求來獲取網頁,比如urllib,requests庫等。
Step2 ---提取資訊 :拿到一整個網頁,但總不會整個內容都是自己需要的吧,這裡就需要提取出自己關心的內容。有一個萬能的方法就是利用正則表示式進行匹配,但是它較難構造且效率不高,所以我們往往使用其他的方法來進行(如Beautiful Soup, XPath, pyquery等),這一部分也是最花時間的一步。
Step3 ---儲存資料 :通常我們可以僅用兩行程式碼,將資訊儲存到檔案中。大量的資料也可以儲存到資料庫中,如MySQL和MongoDB等。
Step4 ---自動化程式 :自動化也就是利用爬蟲代替人的工作。自動化的過程通常會使用多執行緒來加速爬取的過程。
3)Cookies的基本原理:
首先不妨來想一想這樣一件事,你登陸了簡書的賬號,關閉瀏覽器,再開啟的時候就不需要登陸了。這是如何做到的呢?在解釋之前,還要了解HTTP的一個特點:無狀態。這就意味著HTTP協議對事務處理是沒有記憶的。
由於HTTP本身不能提供這種儲存登陸的實現,所以會話(session)和Cookies技術就應運而生了。Coolies儲存了登陸的憑證,有了它,下次就不需要重新輸入賬號密碼來登陸了。Cookie分為兩種級別,一種是會話級,另一種是持久級。會話可以理解是一次開啟瀏覽器,關閉瀏覽器那麼一次會話就“結束”了。
會話級Cookie將Cookie儲存在瀏覽器記憶體中,瀏覽器關閉後Cookie就失效了( 注意區別:session是存在與伺服器中的,並不會消失,只是因為會話級的Cookie失效了,無法找到對應SessionID的session,所以會話也就無法進行下去了 );持久級Cookie將Cookie儲存在硬碟中,儲存的時間可以通過程式自己定義,過期才會失效,實現了一種持久化的解決方案。
小試牛刀:
這一基礎篇主要給新手們理解一下基本的概念,可能也略顯乏味,最後呢,做一個最簡單的爬取(也可以跳過,直接看下篇文章)。
我們來實現一個IP地址自動查詢。IP138網站(http://www.ip138.com)為我們提供了一個天然的介面,就拿它下刀吧。我們先在網站上輸入一個ip,看看有什麼發生(以Google面費DNS為例:8.8.8.8),發現網址變成了這樣

輸入測試IP後的網址
猜想,是不是ip後面接一個符合條件的IP就能直接查詢呢? 於是我們就利用這樣的一個關鍵字介面來寫程式了。(發現複製程式碼不方便,直接貼圖了)

全部程式碼
因為還沒有將後面的知識,所以這裡只是返回整個html頁面,在通過切片截取出有用的部分。這樣就能得到想要的結果了。
結語:
謝謝大家閱讀,希望能對你有所幫助,我也會加緊學習的步伐繼續下去。現在僅僅是開始,精彩永遠在路的盡頭。共勉吧。