人生苦短,快學Python!
在Python爬蟲的學習過程中,爬取圖片幾乎是每個初學者都練習過的專案,比如我們之前就分享過:如何用Python快速爬取小姐姐的美圖?
其中我們需要先利用Python中的request庫和正則構建獲取函式,以此爬取頁面中的圖片url。
最近有位同學分享他抓包獲取到了小米桌布api介面,那這樣再去手機桌布,可就太簡單了!我們只需訪問介面,再解析json資料,即可獲取精準的桌布圖片url。
小米桌布是什麼,其實就是小米手機系統自帶的app,包含了各種風格的手機桌布。
提供介面的同學給的連結實在太長了,我試了試刪去了不太影響主要作用的引數,剩下的介面如下所示:
https://thm。market。xiaomi。com/thm/****/type=WALLPAPER&tag=二次元宅
如果你使用瀏覽器開啟該連結,就能得到10張桌布圖片的詳細資料。其中引數
cardStart
控制翻頁,調整引數
tag
選擇不同的標籤的桌布圖片。
剩下的只需呼叫Python下載圖片到本地即可,具體程式碼如下所示。
def download_img(url, file_name): res = requests。get(url) img = open(file_name, ‘wb’) img。write(res。content) img。close()
簡單解釋一下,requests發起get請求拿到圖片的資訊。
open開啟檔案,以
file_name
(比如111。jpg)為檔名,wb代表以二進位制覆蓋寫。
如果我們想
批次下載桌布圖片怎麼辦呢?
for迴圈就完事了呀!
在互動式環境中輸入如下命令:
for i in range(1,20): url= f“https://thm。market。xiaomi。com/thm/*****/&cardStart={i}&type=WALLPAPER&tag=二次元宅” html = requests。get(url)。content data = json。loads(html。decode(‘utf-8’)) for j in range(10): # 一頁10個 image_url = data[‘apiData’][‘cards’][0][‘products’][j][‘imageUrl’] name = data[‘apiData’][‘cards’][0][‘products’][j][‘name’] print(name, image_url) image_name = f“。/二次元宅/{name}。png” download_img(image_url, image_name)
在上述程式碼中,
json。loads()
函式是將json格式資料轉換為字典。接著再搭配for迴圈獲取某一頁的10個
image_url
和
name
,其中
name
用於設定桌布圖片的本地路徑+名稱(使用相對路徑下載到本地)。
最後呼叫前文中自定義的函式
download_img()
,將每一張桌布圖片都下載到二次元宅資料夾中。
▲下載程式碼執行
開啟本地路徑下的
二次元宅
的資料夾,會發現所有的圖片都已經被下載到本地。
是不是,太簡單了吧!
開啟App看更多精彩內容