当前位置: 首页 > news >正文

python爬虫的防盗链

文章目录

  • 前言
  • 一、防盗链是什么?
  • 二、 防盗链如何实现
  • 三、分析
  • 四、 对有防盗链的网站进行爬取
    • 对有视频连接的网站发出请求并且获取源码信息
    • 提取出我们的视频网站
    • 对我们提取的网址进行修改,和拼凑
    • 下载视频
    • 结束爬取
  • 完整代码


前言

随着python的发展网页的反爬机制也不断完善,下面我们来学习以下反爬机制的防盗链
现在有很多网站都在用防盗链的技术。
例如:梨视频


一、防盗链是什么?

一种反爬机制

二、 防盗链如何实现

首先我们进入一个带视频的网站
我通过我们的开发者工具进行正常抓包
在这里插入图片描述
红线上面的应该为视频的下载地址:
https://video.pearvideo.com/mp4/adshort/20180808/1664876348330-12624968_adpkg-ad_hd.mp4
但是我们在打开这个链接是会出现以下的状况:
在这里插入图片描述
我们通过元素定位发现https://video.pearvideo.com/mp4/adshort/20180808/cont-1407242-12624968_adpkg-ad_hd.mp4这个链接可以播放原视频
我们可以对比两个链接的区别:
https://video.pearvideo.com/mp4/adshort/20180808/1664876348330-12624968_adpkg-ad_hd.mp4

https://video.pearvideo.com/mp4/adshort/20180808/cont-1407242-12624968_adpkg-ad_hd.mp4
在这里插入图片描述
红线的地方是两个链接的区别
这就是一个小小的防盗链

三、分析

既然知道了两个网站的区别我们利用我们的爬虫代码将他们两个修改成一样的不就可以了吗

四、 对有防盗链的网站进行爬取

  1. 对有视频连接的网站发出请求并且获取源码信息
  2. 提取出我们的视频网站
  3. 对我们提取的网址进行修改
    4.下载视频

对有视频连接的网站发出请求并且获取源码信息

import requests

url = "https://www.pearvideo.com/video_1407242"
# 对网页进行分割获取有用的数据
data_ID = url.split("_")[1]
# 编写代有视频链接的url
url_ship = "https://www.pearvideo.com/videoStatus.jsp?contId=1407242&mrd=0.9916564465973412"
# 编写请求头
heead = {
    "User-Agent": 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / '
                  '104.0.5112.102Safari / 537.36Edg / 104.0.1293.63 ',
    "Referer": url
}
# 发出请求
reqs = requests.get(url=url_ship,headers=heead)
# 获取数据
reqs_text = reqs.json()

提取出我们的视频网站

# 拿到网页中报错的404的视频网址
srcurl = reqs_text["videoInfo"]["videos"]['srcUrl']

对我们提取的网址进行修改,和拼凑

# 获取到systemTime的数据用于拼凑视频的下载连接
systime = reqs_text['systemTime']
# 拼凑出视频下载的有效连接
srcurl_1 = srcurl.replace(systime,f'cont-{data_ID}')

下载视频

# 对视频链接发出请求
reqs_sp = requests.get(srcurl_1)
with open("警花.mp4","wb") as fp:
    fp.write(reqs_sp.content)
    print('视频下载完成')

结束爬取

print("爬取结束")
# 关闭网络请求
reqs.close()

完整代码

import requests

url = "https://www.pearvideo.com/video_1407242"
# 对网页进行分割获取有用的数据
data_ID = url.split("_")[1]
# 编写代有视频链接的url
url_ship = "https://www.pearvideo.com/videoStatus.jsp?contId=1407242&mrd=0.9916564465973412"
# 编写请求头
heead = {
    "User-Agent": 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / '
                  '104.0.5112.102Safari / 537.36Edg / 104.0.1293.63 ',
    "Referer": url
}
# 发出请求
reqs = requests.get(url=url_ship,headers=heead)
# 获取数据
reqs_text = reqs.json()
# 拿到网页中报错的404的视频网址
srcurl = reqs_text["videoInfo"]["videos"]['srcUrl']
# 获取到systemTime的数据用于拼凑视频的下载连接
systime = reqs_text['systemTime']
# 拼凑出视频下载的有效连接
srcurl_1 = srcurl.replace(systime,f'cont-{data_ID}')
# 下载视频
## 对视频链接发出请求
reqs_sp = requests.get(srcurl_1)
with open("警花.mp4","wb") as fp:
    fp.write(reqs_sp.content)
    print('视频下载完成')

print("爬取结束")
# 关闭网络请求
reqs.close()

代码由pycharm实现,希望对你有用

相关文章:

  • 【UI自动化】实现C站三连功能
  • 网络规划与部署—ACL命名实验
  • MATLAB-随机森林实现数据回归分析预测
  • SQL考试练习题及全部答案
  • 【C++】内联函数、auto、范围for循环,nullptr
  • Mybatis(第一篇)
  • nodejs+vue+elementui旅游资源网站python-java景点门票预订网站php
  • ArrayList 源码浅析
  • 毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32
  • 【区块链】从社区平台MOJOR看,为何Web3需要原生?
  • 2022年 研究生数学建模题目
  • C# 算数运算符
  • TC8:TCP_HEADER_01-11
  • Mysql出现问题:慢查询日志失效解决方案
  • Unity接入TopOn聚合广告平台SDK【聚合了穿山甲,优量汇(腾讯广告),快手,Mintegral,sigmob等各大广告平台SDK】
  • dva中组件的懒加载
  • ECMAScript6(0):ES6简明参考手册
  • javascript 总结(常用工具类的封装)
  • Java应用性能调优
  • laravel with 查询列表限制条数
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SpringBoot几种定时任务的实现方式
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 关于springcloud Gateway中的限流
  • 十年未变!安全,谁之责?(下)
  • 数据仓库的几种建模方法
  • 详解移动APP与web APP的区别
  • 新书推荐|Windows黑客编程技术详解
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • #define用法
  • #LLM入门|Prompt#3.3_存储_Memory
  • #QT(一种朴素的计算器实现方法)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (31)对象的克隆
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (待修改)PyG安装步骤
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (论文阅读40-45)图像描述1
  • (转)德国人的记事本
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 设计模式初探
  • .NET 设计一套高性能的弱事件机制
  • .net6 webapi log4net完整配置使用流程
  • /etc/fstab 只读无法修改的解决办法
  • @JoinTable会自动删除关联表的数据
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [AutoSar]BSW_Com02 PDU详解
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [flask]http请求//获取请求体数据