天天看點

Python | P站桌面爬取

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

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

Python | P站桌面爬取
Python | P站桌面爬取
Python | P站桌面爬取

在浏覽的時候,當滑到底部時,桌面會重新整理加載,是以我們可以知道,桌面是動态加載的。

打開開發者模式,觀察HTML的動态變化。

Python | P站桌面爬取

點選NetWork,XHR,我們就可以發現,

Python | P站桌面爬取
Python | P站桌面爬取

圖檔位址是通過JSON資料傳輸過來的,是以,我們不就知道了每張桌面對應的url了嗎O(∩_∩)O

找到對應資料接口,開始代碼的幹活!

Python | P站桌面爬取

通過輸入指定頁數,周遊循環:

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      

三十行代碼不到,就可以搞定啦

代碼運作:

Python | P站桌面爬取

結果:

Python | P站桌面爬取
Python | P站桌面爬取
Python | P站桌面爬取
Python | P站桌面爬取

額,突然發現,第一頁和第二頁是一樣的, ̄□ ̄||

不慌,我們可以選擇過濾掉第一頁

把代碼​

​for i in range(int(page))​

改成​

​for i in range(1,int(page)+1)​

再把後面三個地方的 ​

​i+1​

​​ 改成 ​

​i​

​ 即可(〃'▽'〃)

注:如果有對Json和JsonPath子產品不懂的,可以點選下面連結檢視:

​​​Python | JSON 資料解析(Json & JsonPath)​​

最後,附上幾張超可愛的桌面

Python | P站桌面爬取
Python | P站桌面爬取
Python | P站桌面爬取