頭條ixigua原解析失效的解決方法

以前的解析方法

import requests
import re

url = "https://www.ixigua.com/i6746853922465382926/"

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77'
                  '.0.3865.90 Safari/537.36',
}

resp = requests.get(url,headers=headers)
content = resp.text
print(content)
auth_token = re.search(r'"authToken":"(.*?)"',content,re.S).group(1).strip()
businessToken = re.search(r'"businessToken":"(.*?)"',content,re.S).group(1).strip()
vid = re.search(r'"vid":"(.*?)"',content,re.S).group(1).strip()
print(auth_token)
print(businessToken)
print(vid)

r_url = "https://vas.snssdk.com/video/openapi/v1/"
params = {
    'aid': '1768',
    'action': 'GetPlayInfo',
    'video_id': vid,
    'nobase64': 'false',
    'ptoken': businessToken,
    'vfrom': 'xgplayer'
}
s_headers = {
    'authorization':auth_token,
    'accept': 'application/json, text/plain, */*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'origin': 'https://www.ixigua.com',
    'referer': url,
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'cross-site',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77'
                  '.0.3865.90 Safari/537.36',
}
resp = requests.get(r_url, params=params, headers=s_headers)
print(resp.url)
print(resp.text)

在原解析方法中,主要參數,兩個token和視頻vid都是可以在源碼中獲取的,這就使得反爬基本很好應對,最後獲取的內容包含鏈接是base64加密的,解密也沒有難度,

但是,最近這個改了,除了vid,兩個token都拿不到,導致代碼報錯,無法抓取。

目前有三個思路。

一,其實它的兩個token是在一個接口返回的,這個接口需要一個簽名參數_signature。它是js生成的,需要js逆向技能。獲取這個簽名,就可以訪問接口獲取兩個token,帶着兩個token,上面的方法就可以繼續使用。

二,一個古老的視頻接口,只需要vid即可獲取數據。

三,兩個token也是js生成的,可以直接用js逆向去解析兩個token的生成方法,他倆在一起。

由於js確實差,這裏記錄第二種。

import base64

import requests
import re

url = "https://www.ixigua.com/i6746853922465382926/"

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77'
                  '.0.3865.90 Safari/537.36',
}

resp = requests.get(url,headers=headers)
content = resp.text
vid = re.search(r'"vid":"(.*?)"',content,re.S).group(1).strip()

# http://i.snssdk.com/video/urls/1/toutiao/mp4/v030049c0000bmgpumqbr0fnesej9310
url = 'http://i.snssdk.com/video/urls/1/toutiao/mp4/' + vid
print(url)
resp = requests.get(url)
print(resp.text)

urls = re.findall('"main_url":"(.*?)"',resp.text,re.S)
for url in urls:
    print(url)
real_url = urls[-1]
real_url = str(base64.b64decode(real_url.encode('utf-8')),'utf-8')
print(real_url)

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章