- Socket下載一張圖片
- 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的已經出來了,接下來就是跟上面下載一張圖片一樣的操作了
現在運行就搞定了