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