Python網路爬蟲 http和https協議

2022-08-16 17:45:13 字數 4308 閱讀 6495

一.http協議

1.官方概念:

http協議是hyper text transfer protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(www:world wide web )伺服器傳輸超文字到本地瀏覽器的傳送協議。(雖然童鞋們將這條概念都看爛了,但是也沒辦法,畢竟這就是http的權威官方的概念解釋,要想徹底理解,請客觀目移下側......)

2.白話概念:

http協議就是伺服器(server)和客戶端(client)之間進行資料互動(相互傳輸資料)的一種形式。我們可以將server和client進行擬人化,那麼該協議就是server和client這兩兄弟間指定的一種互動溝通方式。

3.http工作原理:

http協議工作於客戶端-服務端架構為上。瀏覽器作為http客戶端通過url向http服務端即web伺服器傳送所有請求。web伺服器根據接收到的請求後,向客戶端傳送響應資訊。

4.http四點注意事項:

- http允許傳輸任意型別的資料物件。正在傳輸的型別由content-type加以標記。

- http是無連線:無連線的含義是限制每次連線只處理乙個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

- http是**獨立的:這意味著,只要客戶端和伺服器知道如何處理的資料內容,任何型別的資料都可以通過http傳送。客戶端以及伺服器指定使用適合的mime-type內容型別。

- http是無狀態:http協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

5.http之url:

http使用統一資源識別符號(uniform resource identifiers, uri)來傳輸資料和建立連線。url是一種特殊型別的uri,包含了用於查詢某個資源的足夠的資訊

url,全稱是uniformresourcelocator, 中文叫統一資源定位符,是網際網路上用來標識某一處資源的位址。以下面這個url為例,介紹下普通url的各部分組成:

從上面的url可以看出,乙個完整的url包括以下幾部分:

- 協議部分:該url的協議部分為「http:」,這代表網頁使用的是http協議。在internet中可以使用多種協議,如http,ftp等等本例中使用的是http協議。在"http"後面的「//」為分隔符

- 埠部分:跟在網域名稱後面的是埠,網域名稱和埠之間使用「:」作為分隔符。埠不是乙個url必須的部分,如果省略埠部分,將採用預設埠

- 虛擬目錄部分:從網域名稱後的第乙個「/」開始到最後乙個「/」為止,是虛擬目錄部分。虛擬目錄也不是乙個url必須的部分。本例中的虛擬目錄是「/news/」

- 檔名部分:從網域名稱後的最後乙個「/」開始到「?」為止,是檔名部分,如果沒有「?」,則是從網域名稱後的最後乙個「/」開始到「#」為止,是檔案部分,如果沒有「?」和「#」,那麼從網域名稱後的最後乙個「/」開始到結束,都是檔名部分。本例中的檔名是「index.asp」。檔名部分也不是乙個url必須的部分,如果省略該部分,則使用預設的檔名

- 錨部分:從「#」開始到最後,都是錨部分。本例中的錨部分是「name」。錨部分也不是乙個url必須的部分

- 引數部分:從「?」開始到「#」為止之間的部分為引數部分,又稱搜尋部分、查詢部分。本例中的引數部分為「boardid=5&id=24618&page=1」。引數可以允許有多個引數,引數與引數之間用「&」作為分隔符。

6.http之request:

客戶端傳送乙個http請求到伺服器的請求訊息包括以下組成部分:

報文頭:常被叫做請求頭,請求頭中儲存的是該請求的一些主要說明(自我介紹)。伺服器據此獲取客戶端的資訊。

常見的請求頭:

accept:瀏覽器通過這個頭告訴伺服器,它所支援的資料型別

accept-charset: 瀏覽器通過這個頭告訴伺服器,它支援哪種字符集

accept-encoding:瀏覽器通過這個頭告訴伺服器,支援的壓縮格式

accept-language:瀏覽器通過這個頭告訴伺服器,它的語言環境

host:瀏覽器通過這個頭告訴伺服器,想訪問哪台主機

if-modified-since: 瀏覽器通過這個頭告訴伺服器,快取資料的時間

referer:瀏覽器通過這個頭告訴伺服器,客戶機是哪個頁面來的 防盜煉

connection:瀏覽器通過這個頭告訴伺服器,請求完後是斷開鏈結還是何持鏈結

x-requested-with: xmlhttprequest 代表通過ajax方式進行訪問

user-agent:請求載體的身份標識

報文體:常被叫做請求體,請求體中儲存的是將要傳輸/傳送給伺服器的資料資訊。

7.http之response:

伺服器回傳乙個http響應到客戶端的響應訊息包括以下組成部分:

狀態碼:以「清晰明確」的語言告訴客戶端本次請求的處理結果。

http的響應狀態碼由5段組成: 

相應頭:響應的詳情展示

常見的相應頭資訊:

相應體:根據客戶端指定的請求資訊,傳送給客戶端的指定資料

二.https協議   

1.官方概念:

https (secure hypertext transfer protocol)安全超文字傳輸協議,https是在http上建立ssl加密層,並對傳輸資料進行加密,是http協議的安全版。

2.白話概念:

加密安全版的http協議。

3.https採用的加密技術

3.1 ssl加密技術

ssl採用的加密技術叫做「共享金鑰加密」,也叫作「對稱金鑰加密」,這種加密方法是這樣的,比如客戶端向伺服器傳送一條資訊,首先客戶端會採用已知的演算法對資訊進行加密,比如md5或者base64加密,接收端對加密的資訊進行解密的時候需要用到金鑰,中間會傳遞金鑰,(加密和解密的金鑰是同乙個),金鑰在傳輸中間是被加密的。這種方式看起來安全,但是仍有潛在的危險,一旦被竊聽,或者資訊被挾持,就有可能破解金鑰,而破解其中的資訊。因此「共享金鑰加密」這種方式存在安全隱患:

3.2 非對稱秘鑰加密技術

「非對稱加密」使用的時候有兩把鎖,一把叫做「私有金鑰」,一把是「公開金鑰」,使用非物件加密的加密方式的時候,伺服器首先告訴客戶端按照自己給定的公開金鑰進行加密處理,客戶端按照公開金鑰加密以後,伺服器接受到資訊再通過自己的私有金鑰進行解密,這樣做的好處就是解密的鑰匙根本就不會進行傳輸,因此也就避免了被挾持的風險。就算公開金鑰被竊聽者拿到了,它也很難進行解密,因為解密過程是對離散對數求值,這可不是輕而易舉就能做到的事。以下是非對稱加密的原理圖:

但是非對稱秘鑰加密技術也存在如下缺點:

第乙個是:如何保證接收端向傳送端發出公開秘鑰的時候,傳送端確保收到的是預先要傳送的,而不會被挾持。只要是傳送金鑰,就有可能有被挾持的風險。

第二個是:非對稱加密的方式效率比較低,它處理起來更為複雜,通訊過程中使用就有一定的效率問題而影響通訊速度

4.https的證書機制

在上面我們講了非對稱加密的缺點,其中第乙個就是公鑰很可能存在被挾持的情況,無法保證客戶端收到的公開金鑰就是伺服器發行的公開金鑰。此時就引出了公開金鑰證書機制。數字證書認證機構是客戶端與伺服器都可信賴的第三方機構。證書的具體傳播過程如下:

1:伺服器的開發者攜帶公開金鑰,向數字證書認證機構提出公開金鑰的申請,數字證書認證機構在認清申請者的身份,審核通過以後,會對開發者申請的公開金鑰做數字簽名,然後分配這個已簽名的公開金鑰,並將金鑰放在證書裡面,繫結在一起

2:伺服器將這份數字證書傳送給客戶端,因為客戶端也認可證書機構,客戶端可以通過數字證書中的數字簽名來驗證公鑰的真偽,來確保伺服器傳過來的公開金鑰是真實的。一般情況下,證書的數字簽名是很難被偽造的,這取決於認證機構的公信力。一旦確認資訊無誤之後,客戶端就會通過公鑰對報文進行加密傳送,伺服器接收到以後用自己的私鑰進行解密。

網路爬蟲(1) 爬蟲與HTTP

聚焦爬蟲 聚焦爬蟲是根據指定的需求抓取網路上指定的資料。例如 獲取豆瓣上電影的名稱和影評,而不是獲取整張頁面中所有的資料值。增量式爬蟲 增量式是用來檢測 資料更新的情況,且可以將 更新的資料進行爬取 後期會有章節單獨對其展開詳細的講解 即 有權規定 中哪些內容可以被爬蟲抓取,哪些內容不可以被爬蟲抓取...

Python爬蟲 網路爬蟲和相關工具

網路爬蟲和相關工具 網路爬蟲的概念 爬蟲的應用領域 搜尋引擎 新聞聚合 社交應用 輿情監控 行業資料 合法性和背景調研 爬蟲合法性 網路爬蟲領域目前還屬於拓荒階段,雖然網際網路世界已經通過自己的遊戲規則建立起一定的道德規範 robots協議,全稱是 網路爬蟲排除標準 但法律部分還在建立和完善中,也就...

Python網路爬蟲之HTTP的異常處理機制

一 urlerror url錯誤異常 通常,urlerror在沒有網路連線 沒有路由到特定伺服器 或者伺服器不存在的情況下產生。這種情況下,異常同樣會帶有 reason 屬性,它是乙個tuple 可以理解為不可變的陣列 包含了乙個錯誤號和乙個錯誤資訊。看下面的示例 從程式中可以看到輸出為 errno...