我在上篇博客记录了批量抓取接口数据的一些解析,详情:https://blog.youkuaiyun.com/s_kangkang_A/article/details/116267728
还分析了从 https://log.mmstat.com/eg.js 获取的utid(cna)不可用并做了测试
也提出来解决办法,使用隧道代理和selenium+chromedriver的方式获取utid(cna)做一个支撑抓取的数据库表
但是,从 https://log.mmstat.com/eg.js 获取的utid(cna)真的不可用吗
在发表上篇博客之后,我偶然运行了一次脚本,用的正是那个从 https://log.mmstat.com/eg.js 获取的,不可用的,测试了拿不到数据的utid(cna)
但结果却发生了变化,数据正常返回了
这是为啥,为什么当时测试没有返回,不经意再次使用就可以了,明明代码什么的都没改变。
等等,到这里,是不是明白了什么,明明代码什么的都没变,那失败和成功之间的变量是什么?没错,是 时间 ,唯一改变的就是时间
也就是说,在一定时间后,utid(cna)变得可用了。于是我做了测试,代码如下:
import base64
import hashlib
import json
import re
import time
import requests
import urllib3
urllib3.disable_warnings()
def get_data(url, utid):
"""‘’
生成data参数
:param url: 视频地址
:return:
"""
# 从连接中获取vid
vid = url.split('id_')[-1].split('.')[0]
# 获取部分url用于生成加密参数
url_ = url.split('//')[-1].split('?')[0]
# base64 加密
emb = base64.b64encode(("809715843" + url_).encode('utf-8')).decode('utf-8')
data = {"biz_params": {"vid": vid},
"ad_params": {
"atm": "",
"aw": "w",
"bt": "pc",
"d": "0&