referer的反爬

一、需求:验证referer反爬的小案例

分析:判断是静态加载还是动态加载,在网页源代码中搜索这个视频的url,发现找不到,是动态加载。需要用network进行抓包,获取url,然后发送请求,保存视频。

二、最终代码呈现

# 1.导入模块
import requests

# 2.指定url
url = 'https://www.pearvideo.com/videoStatus.jsp?contId=1365496&mrd=0.0988497552645411'
# 知道被反爬了,需要把requests headers那些参数拿出来,对他们进行测试,确认到底是哪个参数
header = {'Referer': 'https://www.pearvideo.com/video_1365496'}
# 3.发送请求,获取响应
res = requests.get(url, headers=header)
# json数据转化为字典数据
data = res.json()
# print(data)
srcUrl = data['videoInfo']['videos']['srcUrl']
# 抓包得到了视频url:https://video.pearvideo.com/mp4/adshort/20180613/1680427510664-12251302_adpkg-ad_hd.mp4
# 在elements中得到的视频url:https://video.pearvideo.com/mp4/adshort/20180613/cont-1365496-12251302_adpkg-ad_hd.mp4
# 抓包得到的url,经过搜索无法获取视频,对比两个url,中间略有差别,需要进行处理,需要把这个时间戳1680427510664替换成cont-1365496
# 通过对比发现1365496刚好是refer当中的一部分,可以用split的方法进行获取
refer = 'https://www.pearvideo.com/video_1365496'
refer1 = refer.split('_')[1]
count = 'cont-' + refer1
# 通过观察1680427510664
systemTime = data['systemTime']
# print(systemTime)
# print(srcUrl)
# 替换,我们可以想到replace(old,new)
# print(srcUrl.replace(systemTime,count))   # https://video.pearvideo.com/mp4/adshort/20180613/1680428924523-12251302_adpkg-ad_hd.mp4
# 处理后正确的url
result_url = srcUrl.replace(systemTime, count)
# 发送请求
res1 = requests.get(result_url)
# 保存视频
# 音频,图片,模式改为wb(二进制)
with open('v1.mp4', 'wb') as f:
    # text是文本不是
    # 视频,图片不是文本
    f.write(res1.content)

三、代码部分分析

1、确认反爬

# 1.导入模块
import requests
# 2.指定url
url = 'https://www.pearvideo.com/videoStatus.jsp?contId=1365496&mrd=0.0988497552645411'
# 3.发送请求,获取响应
res = requests.get(url)
# 4.获取响应
print(res.text)

运行结果

因为是json数据,所以会出错,并且被反爬了

2.抓包中的视频url

srcUrl = data['videoInfo']['videos']['srcUrl']

通过network抓包,在preview中查看,类似于剥洋葱一样,一层一层去分析

3.字符串中split方法的简单介绍

refer = 'https://www.pearvideo.com/video_1365496'
refer1 = refer.split('_')
print(refer1)

split方法适用于字符串,返回数据类型为列表['https://www.pearvideo.com/video', '1365496'],通过列表下标可以获取1365496

4.视频查看

 

然后双击就可以看到视频啦!!!

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值