用requests來爬取mc著名皮膚網站blessing skin
blessing skin網站介紹:blessing skin網址為https://skin.prinzeugen.net/ 是深受mc玩家喜愛的皮膚網站。它有著比之前我們爬取過的little skin還多的皮膚。
需要準備的東西
- python直譯器
- 爬蟲庫requests
爬取blessing skin的思路:
通過https://skin.prinzeugen.net/skinlib/show/ + 皮膚號碼的形式獲得到皮膚的網址。在網頁原始碼裡獲得皮膚的詳細介紹。然後通過https://skin.prinzeugen.net/raw/ + 皮膚號碼.png的形式獲得到下載的網址,請求並儲存到本地。
程式的使用:
讓使用者輸入皮膚號碼,程式返回出皮膚的詳細介紹,並且詢問使用者是否要下載此皮膚。若不存在此皮膚號碼,將重新讓使用者輸入皮膚號碼。
import requests
import re
首先,匯入re和requests。re模組主要是幫我們來尋找出皮膚的詳細介紹,而requests就是我們這個爬蟲專案的主要爬蟲框架。
如果要獲取圖片連結,我們就需要讓使用者輸入一個號碼。之後,我們就可以拼接連結了!
str_id = input("請輸入要檢視的皮膚號碼:")
url = 'https://skin.prinzeugen.net/skinlib/show/' + str_id + 'png'
別忘了加上png喲!
接著再請求拼接之後的連結。
image = requests.get(url).content
我們已經以圖片的方式請求了url,這個時候,我們就可以用with關鍵字儲存到本地了! 不過在這之前,我們還需要一個儲存的名字,我們就拿1.png來做名字。
with open(儲存的路徑+'1.png','wb') as file:
file.write(image)
開啟儲存的目錄,成功了!
本人還在空閒時間擴充套件了一下程式碼,大家可以參考一下。
import requests
import re
import os
import time
print("小提示:ctrl + c來快捷退出程式")
def catch():
try:
print("指定皮膚號檢視下載模式請輸入1,輸入其它鍵預設為批量下載模式。")
word = input(">>>")
if word == '1':
while True:
str_id = input("請輸入要檢視的皮膚號碼:")
while str_id.isdigit() == False:
str_id = input("請輸入要檢視的皮膚號碼:")
url = 'https://skin.prinzeugen.net/skinlib/show/' + str_id
text = requests.get(url).text
check = re.findall('<p>(.*?)</p>',text)
if check[0] == 'Details: The requested texture was already deleted.' or check[0] == 'Details: The requested texture is private and only visible to the uploader and admins.':
print("無法訪問此皮膚!請重新輸入一個皮膚號碼!")
continue
skin_name = re.findall('<title>(.*?) - Blessing Skin</title>',text)[0]
likes = re.findall('<span id="likes">(.*?)</span>',text)[0]
model = re.findall('<span id="model">(.*?)</span>',text)[0]
size = re.findall('<td>(.*?)</td>',text)[3]
print('''\n--皮膚內容--
名稱:%s
適用模型:%s
檔案大小:%s
收藏:%s\n'''%(skin_name,model,size,likes))
choose = input("是否要下載此皮膚?(y/n):").lower()
while choose != 'y' and choose != 'n':
choose = input("是否要下載此皮膚?(y/n):").lower()
if choose == 'y':
path = input("皮膚儲存路徑(請使用斜槓“/”):")
while '/' not in path:
print("請使用斜槓“/”!")
path = input("皮膚儲存路徑:")
check = os.path.exists(path)
while check == False:
print("目錄不存在!")
path = input("皮膚儲存路徑(請使用斜槓“/”):")
while '/' not in path:
print("請使用斜槓“/”!")
path = input("皮膚儲存路徑:")
check = os.path.exists(path)
skn_url = 'https://skin.prinzeugen.net/raw/' + str_id + '.png'
image = requests.get(skn_url).content
img_name = skn_url.split('/')[4]
print("下載中...")
with open(path + '/' + img_name,'wb') as file:
file.write(image)
success = True
if success:
print("下載成功!")
else:
print("下載失敗!")
catch()
else:
print("注意:如果在批量下載的過程當中遇到不存在的皮膚,將不會下載!")
id1 = input("請輸入批量下載的開頭皮膚號碼:")
while id1.isdigit() == False:
id1 = input("請輸入批量下載的開頭皮膚號碼:")
id2 = input("請輸入批量下載的結尾皮膚號碼:")
while id2.isdigit() == False:
id2 = input("請輸入批量下載的結尾皮膚號碼:")
check = False
while check == False:
path = input("皮膚儲存路徑(請使用斜槓“/”):")
while '/' not in path:
print("請使用斜槓“/”!")
path = input("皮膚儲存路徑:")
check = os.path.exists(path)
if check == False:
print("目錄不存在!")
id1 = int(id1)
id2 = int(id2)
print("下載中...")
for i in range(id1,id2+1):
url = 'https://skin.prinzeugen.net/skinlib/show/' + str(i)
text = requests.get(url).text
check = re.findall('<p>(.*?)</p>',text)
if check[0] == 'Details: The requested texture was already deleted.' or check[0] == 'Details: The requested texture is private and only visible to the uploader and admins.':
continue
img_url = 'https://skin.prinzeugen.net/raw/' + str(i) + '.png'
image = requests.get(img_url).content
img_name = img_url.split('/')[4]
with open(path + '/' + img_name,'wb') as file:
file.write(image)
print("下載完成!")
catch()
except KeyboardInterrupt:
print("您退出了程式!")
time.sleep(3.5)
exit()
except requests.exceptions.ConnectionError:
print("網路異常!")
time.sleep(3.5)
exit()
catch()
本作品採用《CC 協議》,轉載必須註明作者和本文連結