天天看點

《Python爬蟲開發與項目實戰》——1.5 網絡程式設計

本節書摘來自華章計算機《python爬蟲開發與項目實戰》一書中的第1章,第1.5節,作者:範傳輝著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

  既然是做爬蟲開發,必然需要了解python網絡程式設計方面的知識。計算機網絡是把各個計算機連接配接到一起,讓網絡中的計算機可以互相通信。網絡程式設計就是如何在程式中實作兩台計算機的通信。例如當你使用浏覽器通路谷歌網站時,你的計算機就和谷歌的某台伺服器通過網際網路建立起了連接配接,然後谷歌伺服器會把把網頁内容作為資料通過網際網路傳輸到你的電腦上。

  網絡程式設計對所有開發語言都是一樣的,python也不例外。使用python進行網絡程式設計時,實際上是在python程式本身這個程序内,連接配接到指定伺服器程序的通信端口進行通信,是以網絡通信也可以看做兩個程序間的通信。

  提到網絡程式設計,必須提到的一個概念是socket。socket(套接字)是網絡程式設計的一個抽象概念,通常我們用一個socket表示“打開了一個網絡連結”,而打開一個socket需要知道目标計算機的ip位址和端口号,再指定協定類型即可。python提供了兩個基本的socket子產品:

socket,提供了标準的bsd sockets api。

socketserver,提供了伺服器中心類,可以簡化網絡伺服器的開發。

  下面講一下socket子產品功能。

  1.?socket類型

  套接字格式為:socket(family,type[,protocal]),使用給定的位址族、套接字類型(如表1-2所示)、協定編号(預設為0)來建立套接字。

《Python爬蟲開發與項目實戰》——1.5 網絡程式設計

  2.?socket函數

  表1-3列舉了python網絡程式設計常用的函數,其中包括了tcp和udp。

《Python爬蟲開發與項目實戰》——1.5 網絡程式設計
《Python爬蟲開發與項目實戰》——1.5 網絡程式設計

  本節接下來主要介紹python中tcp和udp兩種網絡類型的程式設計流程。

1.5.1 tcp程式設計

  網絡程式設計一般包括兩部分:服務端和用戶端。tcp是一種面向連接配接的通信方式,主動發起連接配接的叫用戶端,被動響應連接配接的叫服務端。首先說一下服務端,建立和運作tcp服務端一般需要五個步驟:

  1)建立socket,綁定socket到本地ip與端口。

  2)開始監聽連接配接。

  3)進入循環,不斷接收用戶端的連接配接請求。

  4)接收傳來的資料,并發送給對方資料。

  5)傳輸完畢後,關閉socket。

  下面通過一個例子示範建立tcp服務端的過程,程式如下:

《Python爬蟲開發與項目實戰》——1.5 網絡程式設計

  接着編寫用戶端,與服務端進行互動,tcp用戶端的建立和運作需要三個步驟:

  1)建立socket,連接配接遠端位址。

  2)連接配接後發送資料和接收資料。

  3)傳輸完畢後,關閉socket。

  程式如下:

  最後看一下運作結果,先啟動服務端,再啟動用戶端。服務端列印的資訊如下:

  以上完成了tcp用戶端與服務端的互動流程,用tcp協定進行socket程式設計在python中十分簡單。對于用戶端,要主動連接配接伺服器的ip和指定端口;對于伺服器,要首先監聽指定端口,然後,對每一個新的連接配接,建立一個線程或程序來處理。通常,伺服器程式會無限運作下去。

1.5.2 udp程式設計

  tcp通信需要一個建立可靠連接配接的過程,而且通信雙方以流的形式發送資料。相對于tcp,udp則是面向無連接配接的協定。使用udp協定時,不需要建立連接配接,隻需要知道對方的ip位址和端口号,就可以直接發資料包,但是不關心是否能到達目的端。雖然用udp傳輸資料不可靠,但是由于它沒有建立連接配接的過程,速度比tcp快得多,對于不要求可靠到達的資料,就可以使用udp協定。

  使用udp協定,和tcp一樣,也有服務端和用戶端之分。udp程式設計相對于tcp程式設計比較簡單,服務端建立和運作隻需要三個步驟:

  1)建立socket,綁定指定的ip和端口。

  2)直接發送資料和接收資料。

  3)關閉socket。

  示例程式如下:

  用戶端的建立和運作更加簡單,建立socket,直接可以與服務端進行資料交換,示例如下:

  以上就是udp服務端和用戶端資料互動的流程,udp的使用與tcp類似,但是不需要建立連接配接。此外,伺服器綁定udp端口和tcp端口互不沖突,即udp的9999端口與tcp的9999端口可以各自綁定。