你懂的?壞笑(*^▽^*)
今天我們要爬取的是動漫桌面圖檔,來看今天的主角:
在浏覽的時候,當滑到底部時,桌面會重新整理加載,是以我們可以知道,桌面是動态加載的。
打開開發者模式,觀察HTML的動态變化。
點選NetWork,XHR,我們就可以發現,
圖檔位址是通過JSON資料傳輸過來的,是以,我們不就知道了每張桌面對應的url了嗎O(∩_∩)O
找到對應資料接口,開始代碼的幹活!
通過輸入指定頁數,周遊循環:
import requests
import jsonpath
import json
import os
page = input("請輸入需要下載下傳的頁數:")
if not os.path.exists('img'):
os.mkdir('img')
for i in range(int(page)):
num = 1
url = f'https://rt.huashi6.com/front/index/load_pc_data?_ts_=1634131862878&cursor=' + str(i) + '-1634130800452'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0'
}
path = f'img\\第{i+1}頁'
if not os.path.exists(path):
os.mkdir(path)
else:
print(path + '已存在')
continue
html = requests.get(url, headers=headers).content.decode("utf-8")
data = json.loads(html)
img = jsonpath.jsonpath(data, '$..path')
print(f"開始下載下傳第{i+1}頁...")
for j in img:
with open(path+ '\\' + str(num) + os.path.splitext(j)[1], 'wb') as f:
print(f"第{i+1}頁 正在下載下傳第{num}張...")
f.write(requests.get('https://img2.huashi6.com/' + j, headers=headers).content)
num += 1
三十行代碼不到,就可以搞定啦
代碼運作:
結果:
額,突然發現,第一頁和第二頁是一樣的, ̄□ ̄||
不慌,我們可以選擇過濾掉第一頁
把代碼
for i in range(int(page))
改成
for i in range(1,int(page)+1)
再把後面三個地方的
i+1
改成
i
即可(〃'▽'〃)
注:如果有對Json和JsonPath子產品不懂的,可以點選下面連結檢視:
Python | JSON 資料解析(Json & JsonPath)
最後,附上幾張超可愛的桌面