1. 程式人生 > 其它 >python | P站桌布爬取

python | P站桌布爬取

你懂的?壞笑(*^▽^*)

今天我們要爬取的是動漫桌布圖片,來看今天的主角:

在瀏覽的時候,當滑到底部時,桌布會重新整理載入,所以我們可以知道,桌布是動態載入的。

開啟開發者模式,觀察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)

Collection:因為這些東西是非常簡單的。不要抱怨自己學不會,那是因為你沒有足夠用心。