可狱可囚的爬虫系列课程 15:防盗链反爬虫的处理

一、防盗链了解

防盗链是一种技术手段,主要用于防止其他网站通过直接链接的方式使用本网站的资源(如图片、文件等),从而节省带宽和服务器资源。当其他网站尝试直接链接到受保护的资源时,服务器会根据设置的规则判断请求来源,如果发现请求来自未经授权的网站,则拒绝提供资源。

二、某视频网站分析

我们在某视频网站中随便打开一个网页,借助开发者工具寻找视频的播放链接。

(1)2024年度回访:蔡磊坚信努力之后的希望文章中,我们寻得视频的播放地址为:https://video.pearvideo.com/mp4/short/20241231/cont-1797785-16042954-hd.mp4,并且视频能够正常访问。

在这里插入图片描述
在这里插入图片描述

(2)但是当我尝试使用代码将此视频链接进行抓取时,渐渐的发现了端倪,视频链接并不是固定在网页中的,而是在点击播放视频时加载上去的。

import requests


headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
}

Link = 'https://www.pearvideo.com/video_1797785'
response = requests.get(url=Link, headers=headers)
print(response.text)

(3)借助前面提到过的爬虫方法,我在该视频网站中找到了两处关键点:一方面在浏览器地址栏找到了用于构造视频地址的编号,另一方面找到了数据接口也发现了可用于构造视频地址的信息。

在这里插入图片描述

(4)开始构造视频地址,但是提示该文章已下线。这其实很明显,就是一个很容易混淆人的防盗链反爬虫。

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
}
# 1. 复制接口地址,获取接口中的srcUrl
Link = 'https://www.pearvideo.com/videoStatus.jsp?contId=1797785&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
print(response.json())

三、使用 Referer 参数处理防盗链

Referer 防盗链只需要记住一点:“Referer 就是我来时的路”。我们将 Referer 参数放入到 headers 中。

在这里插入图片描述

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
    'Referer': 'https://www.pearvideo.com/video_1797785'
}
# 1. 复制接口地址,获取接口中的srcUrl
Link = 'https://www.pearvideo.com/videoStatus.jsp?contId=1797785&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
print(response.json())

此视频网站的防盗链我们就成功的突破了。

至于如何再将视频下载下来,大家可以顺着思路继续探索!

四、视频下载完整代码

import requests

article_link = 'https://www.pearvideo.com/video_1797785'
video_id = article_link.split('_')[-1]

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
    'Referer': article_link
}
# 1. 复制接口地址,获取接口中的srcUrl和 systemTime
Link = f'https://www.pearvideo.com/videoStatus.jsp?contId={video_id}&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
json_data = response.json()

system_time = json_data['systemTime']
src_url = json_data['videoInfo']['videos']['srcUrl']

# 2. 视频地址拼接构造
video_link = src_url.replace(system_time, f'cont-{video_id}')

# 3.视频下载
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
response = requests.get(url=video_link, headers=headers)
with open('video_01.mp4', 'wb') as video_file:
    video_file.write(response.content)
print('视频下载完成!')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dashboard-frps

通过浏览器查看 frp的状态以及代理统计信息展示。 注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。 需要在 frps.ini中指定 dashboard服务使用的端口,即可开启此功能&…

Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录

因业务需要表单组件中嵌套着表格列表,内容比较多; 所以需要表单校验不通过时,自动定位到不通过的节点; 但发现这个像是没有起到效果一样,后面就是排查的思路了: 容器高度问题:如果表单容器的高度…

实现 Leaflet 多类型点位标记与聚合功能的实战经验分享

在现代的地理信息系统(GIS)应用中,地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施,地图都能以直观的方式呈现数据。然而,当数据量较大时,地图上可能会出现大量的标记点&#x…

次日留存率——mysql计算过程

次日留存率——mysql计算过程 问题:有一张表,有用户id、用户浏览时间a_time,计算每天的用户数、以及次日留存率、三日留存率 创建表user() CREATE TABLE user (id INT, a_time DATE );插入 10 条随机数据 INSERT INTO user (id, a_time) …

老旧android项目编译指南(持续更)

原因 编译了很多项目,找到了一些可观的解决办法 1. android studio里面的jdk版本切换 jdk版本切换在这里,一般安卓开发需要用到4个版本的jdk,jdk8, jdk11, jdk17, jdk21新版的android stuio是默认使用高版本的jdk,所以切换版本是很有必要的 2. 命令…

将VsCode变得顺手好用(1

目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹,用于放置调试文件以及你未来写的代码,随便命名但…

unity学习59: 滑动条 和 滚动条 滚动区域

目录 1 滑动条 slider 1.1 创建slider 1.2 构成的子物体 1.2.1 找到 某个UI的 方法 1.3 构成的component,主体就是 slider 2 核心属性 2.1 value 2.2 direction 3 作用 3.1 由于是fill back 可以实现血条效果 3.2 可以取得 slider.value 数值 1 滑动条…

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候,通过命令行注册相应的服务(比如cloudwego项目的demo_proto以及user服务)失败。 解决办法 经过分析,是…

Hadoop第2课(伪分布式集群的搭建)

jdk和hadoop安装包: hadoop-2.9.2.t......等2个文件官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 1、用XFTP发送hadoop安装包和jdk到/home/hadoop/目录下(hadoop用户的主目录) 2、解压jdk安装包到~目录 卸载jdk的命令:r…

【前端基础】Day 3 CSS-2

目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…

微信小程序源码逆向 MacOS

前言 日常工作中经常会遇到对小程序的渗透测试,微信小程序的源码是保存在用户客户端本地,在渗透的过程中我们需要提取小程序的源码进行问题分析,本篇介绍如何在苹果电脑 MacOS 系统上提取微信小程序的源码。 0x01 微信小程序提取 在苹果电…

C语言入门资料分享源码+PDF速查手册

01 目标:掌握基础语法,能编写简单的程序 源码PDF获取 通过网盘分享的文件:C语言入门到精通.rar 链接: https://pan.baidu.com/s/1lcKj3aywRJUecLmoDeQfFg?pwdxiyx 提取码: xiyx 02 环境搭建 安装编译器(推荐GCC/MinGW/M…

深入理解Java反射机制:从基础到高级应用

一、反射机制概述 Java 反射机制是 Java 语言的一个重要特性,它允许程序在运行时动态地获取类的信息,以及动态地调用对象的方法、修改属性等操作。这意味着程序员可以在运行期间检查和操作类、对象的各种元素,而不需要在编译时就知道这些信息…

[VMware]卸载VMware虚拟机和Linux系统ubuntu(自记录版)

记录一下,不是教程,只是防止我做错了可以回溯一下 我打开vscode,就会跳出下图 虚拟机,Linux还是很久之前学习安装的,种途可能卸载过(不太记得了),现在尝试彻底卸载 彻底卸载VMware虚拟机的详细步骤-CSDN博客虚拟机Vmware 转移 克隆 卸载及移除Linux系统_克隆的虚拟机怎么移除-…

server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)

从你提供的配置文件(应该是 Spring Boot 的 application.yml 或 application.properties 文件)来看,以下部分与会话超时时间相关: server:servlet:session:timeout: 12h # timeout: 30cookie:name: VENDER_SID会话超时时间的…

MS SQL Server partition by 函数实战二 编排考场人员

目录 需求 输出效果 范例运行环境 表及视图样本设计 功能实现 生成考场数据 生成重复的SQL语句 封装为统计视图 编写存储过程实现统计 小结 需求 假设有若干已分配准考证号的考生,准考证号示例(01010001)共计8位,前4位…

北京大学DeepSeek与AIGC应用(PDF无套路下载)

近年来,人工智能技术飞速发展,尤其是大模型和生成式AI(AIGC)的突破,正在重塑各行各业的生产方式与创新路径。 北京大学联合DeepSeek团队推出的内部研讨教程《DeepSeek与AIGC应用》,以通俗易懂的方式系统解…

DeepSeek-OpenSourceWeek-第三天-Release of DeepGEMM

DeepGEMM:这是一款专为高效的 FP8(8 位浮点)通用矩阵乘法(GEMMs)而开发的尖端库。GEMMs 是许多 AI 工作负载(尤其是深度学习)中的基本操作。 特点: 支持稠密和 MoE GEMMs:它可以处理标准的稠密矩阵乘法以及混合专家(MoE)模型中使用的矩阵乘法。MoE 是一种神经网络架…

鸿蒙兼容Mapbox地图应用测试

鸿蒙Next已经发布一段时间了,很多之前的移动端地图应用,纷纷都要求适配鸿蒙Next。作为开发者都清楚,所谓的适配其实都是重新开发,鸿蒙的开发语言和纯前端的Javascript不同,也可以Android原始开发的语言不同。鸿蒙自带的…

【机器学习】Logistic回归#1基于Scikit-Learn的简单Logistic回归

主要参考学习资料: 《机器学习算法的数学解析与Python实现》莫凡 著 前置知识:线性代数-Python 目录 问题背景数学模型类别表示Logistic函数假设函数损失函数训练步骤 代码实现特点 问题背景 分类问题是一类预测非连续(离散)值的…