「Python」爬虫-3.防盗链处理

简介: > 本文主要讲解了视频爬取中的防盗链的处理,以及网易云评论的爬取综合案例来强化我们之前学过的知识。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天, 点击查看活动详情


前言

本文主要讲解了视频爬取中的防盗链的处理,以及网易云评论的爬取综合案例来强化我们之前学过的知识。
如果你对爬虫仍然不太了解的话,可以先阅读一下我的前两篇文章:

「Python」爬虫-1.入门知识简介 - 掘金 (juejin.cn)

「Python」爬虫-2.xpath解析和cookie,session - 掘金 (juejin.cn)

本文参考链接 :

1.点击查看【bilibili】

2.防盗链的原理以及实现


防盗链的概念

关于防盗链,一定有小伙伴会问?什么是防盗链?在爬取信息的时候为什么要对防盗链进行处理呢?

盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容, 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。

一般被盗链的都是图片、 音乐、视频、软件等资源。通过盗链的手段可以减轻自己服务器负担

我们这里需要爬取的视频就属于需要获取资源地址,并在自己的页面上展示的范围,所以需要对防盗链进行处理,不然是爬取不到视频资源的~

防盗链的工作原理:
通过Refer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以追踪到显示他的网页地址 一旦检测到来源不是本站,即进行阻止或者返回指定的页面。

关于防盗链的详情原理与实现可以移步了解 -> 防盗链的原理以及实现 - 知乎 (zhihu.com)

所以我们对防盗链的处理其实也就是在headers里面加上了Referer参数。


防盗链的处理

下面以爬取梨视频为例,目标网站地址:https://www.pearvideo.com/

F12键 ,寻找视频地址, 可以尝试直接搜索(Ctrl+F) vedio 标签 。

但是这里的<vedio>标签是通过js渲染上去的,在页面源代码中并不能提取到,所以在这里我们直接复制vedio标签中视频播放路径src属性
image.png

但是注意到这里有个坑,这个视频连接其实是实时渲染上去的,那个连接中的20210924后面的一串数字很大可能就是当前播放视频的时间戳,所以这里需要查看网络,清空输出台,选中Fetch/XHR,然后点击刷新按钮,观察发送请求,就可以看到当前视频真正的请求地址了。

image.png

页面标签中的src

https://video.pearvideo.com/mp4/adshort/20210924/1633438051634-15773028_adpkg-ad_hd.mp4

实际的url

src="https://video.pearvideo.com/mp4/adshort/20210924/cont-1742368-15773028_adpkg-ad_hd.mp4"

image.png

可以看到实际的请求地址就是把cont-1742368变成了一串1633438051634,这里的cont-1742368其实就是contId,即内容的id。

然后需要对防盗链进行处理了

随便点击一个视频看当前页面的链接其实就是 https://www.pearvideo.com/ + vedio_contId

所以这里的Referer我们可以自己构造,因为在前面分析视频的真正播放地址的时候我们就已经分析得到了视频的contId,即1742368

image.png

当然你也可以直接查看参数,也就是找 User-Agent的地方,直接复制也可。

整个爬取的视频的思路仍然和前面一样,确定目标网址 -> 请求该网址 ->读取response -> 处理response -> 下载视频/...

完整代码如下:

# 爬取步骤:
# 1.拿到contId
# 2.拿到vedioStatus返回的Json -> srcUrl
# 3.srcUrl里面的内容进行调整
# 4.下载视频

# refer : 就是一个溯源,寻找请求的网址是哪一个

import requests

url = "https://www.pearvideo.com/video_1742368"
contId = url.split("_")[1]  # 以"_"分割 拿到  "_" 后面的编号1742368
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.5467768006452396"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38",
    # 防盗链:溯源,当前本次请求的上一级是谁
    "Referer": url
}

resp = requests.get(videoStatusUrl, headers=headers)
dic = resp.json()
srcUrl = dic['videoInfo']['videos']['srcUrl']
systemTime = dic['systemTime']
# https://video.pearvideo.com/mp4/adshort/20210924/1633438051634-15773028_adpkg-ad_hd.mp4
# src="https://video.pearvideo.com/mp4/adshort/20210924/cont-1742368-15773028_adpkg-ad_hd.mp4"
srcUrl = srcUrl.replace(systemTime,f"cont-{contId}")
print(srcUrl)

# 下载视频
with open("a.pm4",mode="wb") as f:
    f.write(requests.get(srcUrl).content)
这次的文章就暂且码到这儿了⛷️⛷️⛷️,后续更新XHR断点调试以及视频m3u8解密~

往期好文推荐🪶

「Android」1.简单的登录页面设计

「MongoDB」Win10版安装教程

「Python」数字推盘游戏

「Python」sklearn第一弹-标准化和非线性转化

「Python」turtle绘制图形🎈

「Python」Pandas-DataFrame的相关操作二

相关文章
|
28天前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
2月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
3月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
300 0
|
1月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
2月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
650 19
|
1月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
1月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
2月前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
2月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略
|
2月前
|
数据采集 网络协议 API
协程+连接池:高并发Python爬虫的底层优化逻辑
协程+连接池:高并发Python爬虫的底层优化逻辑

推荐镜像

更多