使用Socket下載圖片


  1. Socket下載一張圖片
  2. Socket下載一頁圖片

Socket下載一張圖片

 

在百度搜索頭像,挑一張

 復制圖片的路徑打開,並保存這個url

把這個url的域名和路徑分開

 

 首先導入socket模塊

 

 第一步:創建套接字客戶端

 

 第二步:發起連接,connect()參數填域名和端口,http協議端口默認為80

 

 第三步:構造報文

 

報文里的URL就是一開始從圖片地址將域名和路徑分出來的,然后將報文寫在一行

 

 第四步:發送HTTP請求

 此時運行會報錯

因為Socket 發送和接收的都是bytes的數據,需要字節對象,現在的還是字符串,通過encode()編碼

 

 第五步:循環接收響應的內容

 因為不知道響應的內容具體有多少,每次從管道中取出1024字節,取完為止,然后可以打印出res,看看接收到的數據

 

 第六步:通過正則匹配圖片的內容(去掉響應頭)

 這個也得用bytes的數據去匹配,匹配完返回的類型是一個列表

 

最后一步:把圖片寫入到本地

 圖片的內容本身就是二進制,就不用decode()解碼了

 

 

 

Socket下載一頁圖片

依然選擇的是頭像這個網頁,這次不用選擇圖片,直接把這一頁的全給下載到本地

復制這個網頁的路徑,並保存這個URL

 

第一步:把網頁的url賦值給一個變量保存,為方便后續識別,可以在注釋里把域名和路徑區分開

 

第二步:寫一個方法,方便多次使用(跟上面下載一張圖片的步驟一樣)

 

第三步:構造報文(報文里的路徑是剛才在注釋里為方便識別而區分開的),將域名和報文傳入這個方法,打印顯示接收到的內容,返回的是bytes類型,打印的時候需要decode()

 這時,你會發現,這響應的內容就是網頁的源代碼

 

 第四步:這時,需要到網頁里去尋找出圖片的url,知道url才知道下載的東西在哪里

 復制URL到網頁的源代碼中搜索,找到三個URL

 每個url前都有一個不同的參數,需要下載一頁圖片,就要知道所有圖片的url的共同點,把這三個參數分別去搜索了一下,發現,都有30次的出現,這就能確定是所有圖片url都帶有的了

 

 

 

 第五步:找到url的特點后,我們可以通過正則在返回的源碼中匹配出所有圖片的url

 

 最后一步:通過for迭代,依次對列表里的url進行下載

 

 這時,每張圖片的url的已經出來了,接下來就是跟上面下載一張圖片一樣的操作了

 

 現在運行就搞定了

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM