1. 程式人生 > >批量爬取某圖片網站的圖片

批量爬取某圖片網站的圖片

批量爬取某圖片網站的圖片

宣告:僅用於爬蟲學習,禁止用於商業用途謀取利益

1、網頁解析

  • (1)開啟veer首頁,F12(谷歌瀏覽器),輸入關鍵字,點選搜尋,點選檢視如圖畫圈位置
    在這裡插入圖片描述

  • (2)檢視search中的Headers,找到請求的URL和請求的payload,URL是請求的網址,payload是傳送請求時的引數

    對於各個詳細的引數在程式碼部分會詳細講
    在這裡插入圖片描述

  • (3)檢視響應(請求發出後的返回的資料包),格式是字典格式也就是map,可以看到list中放的id

在這裡插入圖片描述

  • (4)裡邊有對圖片的中文描述

在這裡插入圖片描述

  • (5)找到圖片所在網頁

在這裡插入圖片描述

  • (6)找到最大尺寸的圖片網址
    在這裡插入圖片描述

2、程式碼解析

#conding=utf-8

import requests
import json

def download(img_url, img_name):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101'
    }
    req = requests.get(img_url, headers=headers)
    path = r'F:\newimg'
    file_name =
path + '\\' + img_name+img_url[-13:]#圖片名為描述+圖片的編號 f = open(file_name, 'wb') f.write(req.content)#以位元組流的形式讀入檔案 f.close def get_list(name, type): url = 'https://www.veer.com/ajax/search' #URL header = { 'content-type': 'application/json', 'Host': 'www.veer.com', 'User-Agent'
: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } payloadData = { 'graphicalStyle': type, #型別:1.照片 2.插畫 3.向量圖 Nan為全部 'page': 1, #分頁數量 'page_type': 6, #分頁的格式,這個不重要 'perpage': 10000, #一頁多少圖片 'phrase': name #搜尋的關鍵字 }# 分頁數量為1,一頁10000,是為了儘量只從一個頁面上的到所有的list html = requests.post(url, data=json.dumps(payloadData), proxies={"http" : "http:// 115.225.74.53: 8118"}, headers=header).text #payloadData要求用josn來進行解析,代理ip自己去爬取, list = json.loads(html)#獲取json解析的list,不然全是亂碼 data = list['data'] #封裝成字典格式 print("總共搜尋到圖片:",data['totalCount'], "張圖片") id = data['list'] for sid in id: print(sid['oss400'], sid['cnTitle'])#用的是400的,為了veer的利益,不採用1600尺寸的圖片 if sid['cnTitle']==None:#防止圖片描述為空 sid['cnTitle'] = "none" download(sid['oss400'], sid['cnTitle'])#進行下載 if __name__ == '__main__': print("輸入搜尋圖片名稱:") name = input() print("選擇圖片型別1.照片 2.插畫 3.向量圖 4.所有") type = input() if type>'3': type="" get_list(name, type)

3、效果展示

  • (1)程式執行介面
    在這裡插入圖片描述

  • (2)檔案儲存介面
    在這裡插入圖片描述