批量爬取某圖片網站的圖片
阿新 • • 發佈:2018-11-01
批量爬取某圖片網站的圖片
宣告:僅用於爬蟲學習,禁止用於商業用途謀取利益
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)檔案儲存介面