使用python爬取taptap網站遊戲截圖的步驟

今天使用python寫瞭一個簡單的爬蟲,用來下載taptap網站的遊戲截圖。下面說下具體的實現方法。

在搜索框中搜索“原神”

打開瀏覽器的開發者選項,從詳情按鈕裡面跳轉到遊戲的頁面,點擊詳情之後,跳轉頁面

這時候看到,瀏覽器地址:https://www.taptap.com/app/168332,tap官網的域名加上app/和圖一的遊戲id,可以使用re模塊正則表達式模塊從接口中獲取到這個id

x_ua = 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=4&VN=0.1.0&LOC=CN&PLT=PC&DS=Android&UID=97bb961f-bf03-4c7a-8cd7-8d6d8655d9c8&DT=PC'

def search(game_name):
    """根據遊戲名搜索提取出遊戲id"""
    url = 'https://www.taptap.com/webapiv2/mix-search/v1/by-keyword'
    data = {
        'kw': f'{game_name}',
        'X-UA' : x_ua
        # 'X-UA': 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=4&VN=0.1.0&LOC=CN&PLT=PC&DS=Android&UID=97bb961f-bf03-4c7a-8cd7-8d6d8655d9c8&DT=PC'
    }
    r = requests.get(url=url, params=data)

    pattern = re.compile('"type":"app","identification":"app:(.+?)"', re.S)
    r1 = pattern.findall(r.text)
    #從response中提取遊戲id
    return r1[0]

然後打開開發者選項觀察接口,可以從這個接口中獲取到遊戲截圖的鏈接,

把數據json格式化一下,可以發現在data下,”screenshots”下的“orignal_url”就是截圖的鏈接。使用json.load轉換成字典,就可以比較方便的取出內容瞭。

   url = f'https://www.taptap.com/webapiv2/app/v2/detail-by-id/{search(game_name)}'
    r = requests.get(url=url, params={'X-UA': x_ua})
    data = json.loads(r.text)
    #轉換為字典格式
    original_url = data.get('data').get('screenshots')
    #提取出截圖url

之後使用一個循環將圖片保存到本地

for i in original_url:
            time.sleep(0.5)
            game_original_url = i.get('original_url')
            print(game_original_url, type(game_original_url))
            respones = requests.get(game_original_url)
            img = respones.content
            file_name = game_original_url[-36: -4]
            screenshots = os.path.join(os.path.dirname(__file__), f'screenshots/{game_name}')
            if not os.path.exists(screenshots):
                os.makedirs(screenshots)
            file_path = os.path.join(screenshots, file_name)
            with open(file_path + '.png', 'wb') as f:
                f.write(img)

完整代碼:

import os
import requests
import json
import re
import time

x_ua = 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=4&VN=0.1.0&LOC=CN&PLT=PC&DS=Android&UID=97bb961f-bf03-4c7a-8cd7-8d6d8655d9c8&DT=PC'

def search(game_name):
    """根據遊戲名搜索提取出遊戲id"""
    url = 'https://www.taptap.com/webapiv2/mix-search/v1/by-keyword'
    data = {
        'kw': f'{game_name}',
        'X-UA' : x_ua
        # 'X-UA': 'V=1&PN=WebApp&LANG=zh_CN&VN_CODE=4&VN=0.1.0&LOC=CN&PLT=PC&DS=Android&UID=97bb961f-bf03-4c7a-8cd7-8d6d8655d9c8&DT=PC'
    }
    r = requests.get(url=url, params=data)

    pattern = re.compile('"type":"app","identification":"app:(.+?)"', re.S)
    r1 = pattern.findall(r.text)
    #從response中提取遊戲id
    return r1[0]

def download_screenshots(game_name):
    url = f'https://www.taptap.com/webapiv2/app/v2/detail-by-id/{search(game_name)}'
    r = requests.get(url=url, params={'X-UA': x_ua})
    data = json.loads(r.text)
    #轉換為字典格式
    original_url = data.get('data').get('screenshots')
    #提取出截圖url
    try:
        for i in original_url:
            time.sleep(0.5)
            game_original_url = i.get('original_url')
            print(game_original_url, type(game_original_url))
            respones = requests.get(game_original_url)
            img = respones.content
            file_name = game_original_url[-36: -4]
            screenshots = os.path.join(os.path.dirname(__file__), f'screenshots/{game_name}')
            if not os.path.exists(screenshots):
                os.makedirs(screenshots)
            file_path = os.path.join(screenshots, file_name)
            with open(file_path + '.png', 'wb') as f:
                f.write(img)

    except:
        print('下載失敗')

if __name__ == '__main__':
    download_screenshots('lol')

以上就是使用python爬取taptap遊戲截圖的步驟的詳細內容,更多關於使用python爬取taptap遊戲截圖的資料請關註WalkonNet其它相關文章!

推薦閱讀: