之前爱奇艺多次因会员涨价上热搜,近日更是风波不断,先是被网友曝出对会员投屏功能作出限制,据用户反馈之前黄金VIP会员支持最高4K分辨率的投屏,但现在则只能选择最低的480P。一波未平一波又起,最近又爆出爱奇艺限制HDMI线连接电视播放。
但是近期发布的财报数据显示,爱奇艺会员增收“177亿元、同比上涨6%”,这是爱奇艺2022年的会员服务收入数据,核心的会员业务收入创历史单季收入最高值,之前的各种沸沸扬扬的风波好像造成的影响并不是很大。
现在的视频app太多了,出了一部想看的电视据就要充一次会员,充一个月的会员又感觉有些浪费,毕竟好看的电视电影是在不同的视频app上才能看的,于是今天我们用Python来实战如何获取vip视频。通过分析发现网站没有提供下载接口,如果想把视频下载下来,我们就可以利用网络爬虫进行抓包,我们使用Fiddler进行抓包。我们可以看到,有用的请求并不多,我们逐条分析就可以了。
接下来是编写代码,编写代码的时候注意一个问题,就是我们需要使用requests.session()保持我们的会话请求。简单来讲就是在初次访问服务器的时候,服务器会给你分配一个身份证明。我们需要拿着这个身份证去继续访问,如果没有这个身份证明,服务器就不会再让你访问。这也就是这个服务器的反爬虫手段,会验证用户的身份,一般都是通过访问的IP进行验证。这里我们可以通过python+urllib2+Proxy-Tunnel保持IP不变,同时通过多线程处理。
#! -- encoding:utf-8 -- import requests # 导入requests库 import random import threading # 导入threading库,用于多线程
#要访问的目标页面
targetUrlList = [ “https://httpbin.org/ip”, “https://httpbin.org/headers”, “https://httpbin.org/user-agent”, ]
#代理服务器(产品官网 www.16yun.cn)
proxyHost = “t.16yun.cn” proxyPort = “31111”
#代理验证信息
proxyUser = “16yun” proxyPass = “16ip”
proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}" # 使用f-string格式化字符串
#设置 http和https访问都是用HTTP代理
proxies = { “http”: proxyMeta, “https”: proxyMeta, }
#设置IP切换头
tunnel = random.randint(1, 10000) headers = {“Proxy-Tunnel”: str(tunnel)}
#定义一个变量,用于统计请求次数
request_count = 0
#定义一个锁对象,用于保护请求次数的变量
lock = threading.Lock()
#定义一个函数,用于发起请求和打印响应
def get_url(url): global request_count # 声明全局变量 r = requests.get(url, proxies=proxies, headers=headers) # 使用requests库发起请求,传入代理和头信息 # 判断状态码是否为200,如果不是,打印错误信息 if r.status_code == 200: print(r.text) # 打印响应内容 else: print(f"请求失败,状态码为{r.status_code}") # 打印错误信息 # 获取锁,如果锁被占用,就等待,直到锁释放 lock.acquire() request_count += 1 # 请求次数加一 # 释放锁,让其他线程可以获取锁 lock.release()
#定义一个列表,用于存放线程对象
threads = []
#访问三次网站,使用相同的tunnel标志,均能够保持相同的外网IP
for i in range(3): for url in targetUrlList: t = threading.Thread(target=get_url, args=(url,)) # 创建线程对象,传入url参数 threads.append(t) # 将线程对象添加到列表中
#启动所有线程
for t in threads: t.start()
#等待所有线程结束
for t in threads: t.join()
#打印请求次数
print(f"总共请求了{request_count}次")