以前的解析方法
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)
結果: