人生苦短,我用 Pythonjavascript
前文傳送門:html
小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝python
小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門數據庫
小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門json
小白學 Python 爬蟲(5):前置準備(四)數據庫基礎小程序
小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝微信小程序
這個實際上是一個冷知識,各位同窗能夠猜想一下計算機網絡的起源是在哪裏。瀏覽器
硅谷?大學?實驗室?有點接近了,但還不夠準確。緩存
準確的答案是在美蘇冷戰背景下的美國國防部 。
對的,你沒看錯,是美國軍方 ,最早進的技術老是先應用於軍事領域,隨着時間的推移纔會慢慢的民用化。
1968年,在美國國防部高級計劃局的領導下,阿帕網( ARPANET )誕生了。
ARPANET只有四個節點,鏈接起加利福尼亞州大學洛杉磯分校、加州大學聖巴巴拉分校、斯坦福大學、猶他州大學這四所學校的大型計算機。
阿帕網 ,是全球公認的計算機網絡的始祖。
爬蟲是一個模擬瀏覽器進行 HTTP 請求的過程。這就須要咱們瞭解從瀏覽器輸入 URL 到獲取到網頁中間究竟發生了什麼。
先介紹一組概念, URI 和 URL :
沒看懂是吧,沒事兒,不須要懂,瞭解一下就行了,咱們來舉例子。
好比上面這張圖片的地址:https://cdn.geekdigging.com/python-spider/uri-url-urn.png ,它是一個 URL 同時也是一個 URI , URL 是 URI 的子集,也就是說每一個 URL 都是 URI ,但不是每一個 URI 都是 URL ,由於 URI 還包括一個子類叫 URN 。在目前的網絡中 URN 的使用很是少,因此幾乎全部的 URI 都是 URL ,通常的網頁連接咱們既能夠稱爲 URL ,也能夠稱爲 URI ,徹底看我的喜愛。
什麼是超文本?
超文本是指能夠連接到另外一個文檔或文本的單詞,短語或大塊文本。超文本涵蓋了文本超連接和圖形超連接。
咱們在瀏覽器中訪問的網頁是由 HTML 編寫而成,而 HTML 則被稱做爲「超文本標記語言」。在 HTML 代碼中,包含了一系列的標籤,包括圖片等的超連接。
咱們來看一下一個真實的網站的源代碼是怎麼樣的,在 Chrome 瀏覽器中,使用 F12 打開開發者工具。
什麼是 HTTP ?
超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,互聯網上應用最爲普遍的一種網絡協議,全部的WWW文件都必須遵照這個標準。設計HTTP的初衷是爲了提供一種發佈和接收HTML頁面的方法。
什麼是HTTPS?
《圖解HTTP》這本書中曾提過HTTPS是身披SSL外殼的HTTP。HTTPS是一種經過計算機網絡進行安全通訊的傳輸協議,經由HTTP進行通訊,利用SSL/TLS創建全信道,加密數據包。HTTPS使用的主要目的是提供對網站服務器的身份認證,同時保護交換數據的隱私與完整性。
PS:TLS是傳輸層加密協議,前身是SSL協議,由網景公司1995年發佈,有時候二者不區分。
如今愈來愈多的網站和App都已經向HTTPS方向發展,例如:
HTTP 協議自己是很是簡單的。它規定,只能由客戶端主動發起請求,服務器接收請求處理後返回響應結果,同時 HTTP 是一種無狀態的協議,協議自己不記錄客戶端的歷史請求記錄。
爲了比較直觀的展現這個過程,咱們依然打開 Chrome 瀏覽器,按 F12 開啓開發者模式。
看第一行,www.geekdigging.com 那一行:
咱們點擊一下那一行,能夠看到更加詳細的內容:
包含了 Header 頭信息, Preview (Response Preview) 響應信息預覽, Response 響應具體的 HTML 代碼, Cookies ,Timing 整個請求週期耗時。
General部分: Request URL 爲請求的URL, Request Method 爲請求的方法, Status Code 爲響應狀態碼, Remote Address 爲遠程服務器的地址和端口, Referrer Policy 爲Referrer判別策略。
一個HTTP請求報文由請求行(request line)、請求頭部(headers)、空行(blank line)和請求數據(request body)4個部分組成。
分爲三個部分:請求方法、請求地址URL和HTTP協議版本,它們之間用空格分割。
例如,GET /index.html HTTP/1.1。
HTTP/1.1 定義的請求方法有8種:
經常使用的有 GET 和 POST 。
在瀏覽器中直接輸入URL並回車,這就發起了一個 GET 請求,請求的參數會直接包含在 URL 裏,請求參數和對應的值附加在URL後面,利用一個問號 ?
表明URL的結尾與請求參數的開始,傳遞參數長度受限制。因爲不一樣的瀏覽器對地址的字符限制也有所不一樣,通常最多隻能識別1024個字符,因此若是須要傳送大量數據的時候,也不適合使用GET方式。
容許客戶端給服務器提供信息較多。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,能夠傳輸大量數據,這樣POST方式對傳送的數據大小沒有限制,並且也不會顯示在URL中。
由於請求行所攜帶的信息量很是有限,以致於客戶端還有不少想向服務器要說的事情不得不放在請求首部(Header),請求首部用於給服務器提供一些額外的信息,好比 User-Agent 用來代表客戶端的身份,讓服務器知道你是來自瀏覽器的請求仍是爬蟲,是來自 Chrome 瀏覽器仍是 FireFox。HTTP/1.1 規定了47種首部字段類型。 HTTP 首部字段的格式很像 Python 中的字典類型,由鍵值對組成,中間用冒號隔開。
下面簡要說明一些經常使用的頭信息。
請求體通常承載的內容是POST請求中的表單數據,而對於GET請求,請求體則爲空。
注意這裏提交數據的方式和請求頭設置的 Content-Type 息息相關。
服務端接收請求並處理後,返回響應內容給客戶端,一樣地,響應內容也必須遵循固定的格式瀏覽器才能正確解析。HTTP 響應也由3部分組成,分別是:響應行、響應首部、響應體,與 HTTP 的請求格式是相對應的。
響應行一樣也是3部分組成,由服務端支持的 HTTP 協議版本號、狀態碼、以及對狀態碼的簡短緣由描述組成。
響應狀態碼錶示服務器的響應狀態,常見的如200表明服務器正常響應,404表明頁面未找到,500表明服務器內部發生錯誤。
響應頭包含了服務器對請求的應答信息,如Content-Type、Server、Set-Cookie等。下面簡要說明一些經常使用的頭信息。
最重要的當屬響應體的內容了。響應的正文數據都在響應體中,好比請求網頁時,它的響應體就是網頁的HTML代碼;請求一張圖片時,它的響應體就是圖片的二進制數據。
在作爬蟲時,咱們主要經過響應體獲得網頁的源代碼、JSON數據等,而後從中作相應內容的提取。
https://blog.csdn.net/koflance/article/details/79635240
http://www.javashuo.com/article/p-wybdsvhv-kt.html