很多人都知道,網絡上有很多的壁紙,但是大部分都是1980*1080的分辨率,可是這專爲Mac系統做的壁紙卻是5000+*3000+的分辨率,你可以想象一下兩種壁紙的差距,這裏我用的是火狐瀏覽器,不多說了,直接上代碼
# !/usr/bin/env python
# 獲取一個網址 pip install requests
from requests import get
# 判斷文件類型的第三方包 pip install filetype
from filetype import guess
# 命名文件或者目錄
from os import rename
# 創建目錄的包
from os import makedirs
# 判斷文件是否存在
from os.path import exists
# 將已經編碼的json字符串解碼爲python對象
from json import loads
# 上下文管理器操作模塊 當我們請求api的時候,如果程序運行完成了,就關閉鏈接
from contextlib import closing
'''
1.獲取圖片資源
2.下載圖片資源
'''
# 文件下載器 參數:1.資源鏈接 2.保存路徑 3.當前下載數量 4.圖片總數
def down_load(file_url, file_path, now_wallpaper_count, all_wallpaper_count):
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
# 開始下載圖片
with closing(get(file_url, headers=headers, stream=True)) as response:
# 單次請求最大值
chunk_size = 1024
# 文件總大小 這個參數在瀏覽器響應頭中
content_size = int(response.headers['content-length'])
# 初始化當前已經傳輸的大小
data_count = 0
# 文件操作
if response.status_code == 200:
with open(file_path, 'wb') as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
done_block = int((data_count / content_size) * 50)
data_count = data_count + len(data)
# 當前的下載百分比
now_percentage = (data_count / content_size) * 100
print("\r %s: [%s%s] %d%% %d/%d" % (file_path, done_block * '*', ' ' * (50 - 1 - done_block), now_percentage, now_wallpaper_count, all_wallpaper_count), end=' ')
# 下載完圖片後獲取圖片拓展名
file_pype = guess(file_path)
try:
rename(file_path, file_path + '.' + file_pype.extension)
except FileExistsError:
print('該資源已經存在...')
rename(file_path, file_path + '副本' + '.' + file_pype.extension)
# 獲取圖片資源
def spider_wallpaper(type_id, wallpaper_count):
url = ''
if(type_id == 1):
url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c68ffb9463b7fbfe72b0db0?page=1&per_page=' + str(wallpaper_count)
elif(type_id == 2):
url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c69251c9b1c011c41bb97be?page=1&per_page=' + str(wallpaper_count)
elif(type_id == 3):
url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c81087e6aee28c541eefc26?page=1&per_page=' + str(wallpaper_count)
elif(type_id == 4):
url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c81f64c96fad8fe211f5367?page=1&per_page=' + str(wallpaper_count)
# 因爲當我們用爬蟲程序去訪問網站的時候,那個網站會檢測你是不是用瀏覽器
# 去訪問的,如果不是,會禁止你訪問
# 模擬瀏覽器向網站發請求
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
response = get(url, headers=headers)
# 把json數據轉成python對象
wallpaper_data = loads(response.content)
# 已經下載的圖片張數 初始值
now_wallpaper_count = 1
# 所有的圖片張數
all_wallpaper_count = len(wallpaper_data)
# 開始下載並保存5k分辨率壁紙
make_dir = ''
for wallpaper in wallpaper_data:
# 創建一個文件夾來存放我們下載的圖片
if type_id == 1:
if not exists('./' + '最新壁紙'):
makedirs('./' + '最新壁紙')
make_dir = '最新壁紙'
elif type_id == 2:
if not exists('./' + '最熱壁紙'):
makedirs('./' + '最熱壁紙')
make_dir = '最熱壁紙'
elif type_id == 3:
if not exists('./' + '女生壁紙'):
makedirs('./' + '女生壁紙')
make_dir = '女生壁紙'
elif type_id == 4:
if not exists('./' + '星空壁紙'):
makedirs('./' + '星空壁紙')
make_dir = '星空壁紙'
# print(wallpaper)
# 準備下載的圖片鏈接
file_url = wallpaper['urls']['raw']
# 準備下載的圖片鏈接
file_name_only = file_url.split('/')
# 以最後一個url參數作爲壁紙名稱
file_name_only = file_name_only[len(file_name_only) - 1]
# 拼接下載路徑
file_path = './' + make_dir + '/' + file_name_only
# 下載圖片
down_load(file_url, file_path, now_wallpaper_count, all_wallpaper_count)
print('\t' + file_name_only)
now_wallpaper_count += 1
if __name__== "__main__":
while(True):
print('\n\n')
# 選擇壁紙類型
wall_paper_id = input('請輸入壁紙類型(數字) [1.最新壁紙 2.最熱壁紙 3.女生壁紙 4.星空壁紙]:')
# 判斷輸入是否正確
while (wall_paper_id != str(1) and wall_paper_id != str(2) and wall_paper_id != str(3) and wall_paper_id != str(4)):
wall_paper_id = input('請重新輸入壁紙類型(數字) [1.最新壁紙 2.最熱壁紙 3.女生壁紙 4.星空壁紙]:')
# 選擇要下載的壁紙數量
wall_paper_count = input('請輸入要下載的5K超清壁紙的數量: ')
# 判斷輸入是否正確
while(int(wall_paper_count) <= 0):
wall_paper_count = input('請重新輸入要下載的5K超清壁紙的數量:')
# 開始爬取5k超清壁紙
print('正在下載5k超清壁紙...')
spider_wallpaper(int(wall_paper_id), int(wall_paper_count))
print('\n下載5k超清壁紙成功...')
break
下圖是怎樣在瀏覽器上獲取你想要的的到的"User-Agent":,
下圖是獲取正確的api:左邊的列表裏面有一個叫域名的東西,只看其中有api的,點擊就看右邊,直到出現和圖中類似的纔是正確的api,如果不是正確的api,則會顯示賬號爲登陸