「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

因此, Referer就构造成 https://www.pearvideo.com/vedio_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的相关操作二

相关文章
|
2天前
|
数据采集 XML 数据处理
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页内容并进行简单的数据处理。通过学习本文,读者将了解Web爬虫的基本原理和Python爬虫库的使用方法。
|
2天前
|
数据采集 Web App开发 数据处理
Lua vs. Python:哪个更适合构建稳定可靠的长期运行爬虫?
Lua vs. Python:哪个更适合构建稳定可靠的长期运行爬虫?
|
2天前
|
数据采集 Web App开发 Java
Python 爬虫:Spring Boot 反爬虫的成功案例
Python 爬虫:Spring Boot 反爬虫的成功案例
|
2天前
|
数据采集 Python
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页上的信息。通过分析目标网页的结构,利用Python中的requests和Beautiful Soup库,我们可以轻松地提取所需的数据,并将其保存到本地或进行进一步的分析和处理。无论是爬取新闻、股票数据,还是抓取图片等,本文都将为您提供一个简单而有效的解决方案。
|
2天前
|
数据采集 存储 XML
如何利用Python构建高效的Web爬虫
本文将介绍如何使用Python语言以及相关的库和工具,构建一个高效的Web爬虫。通过深入讨论爬虫的基本原理、常用的爬虫框架以及优化技巧,读者将能够了解如何编写可靠、高效的爬虫程序,实现数据的快速获取和处理。
|
2天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
2天前
|
数据采集 存储 大数据
Python爬虫:数据获取与解析的艺术
本文介绍了Python爬虫在大数据时代的作用,重点讲解了Python爬虫基础、常用库及实战案例。Python因其简洁语法和丰富库支持成为爬虫开发的优选语言。文中提到了requests(发送HTTP请求)、BeautifulSoup(解析HTML)、Scrapy(爬虫框架)、Selenium(处理动态网页)和pandas(数据处理分析)等关键库。实战案例展示了如何爬取电商网站的商品信息,包括确定目标、发送请求、解析内容、存储数据、遍历多页及数据处理。最后,文章强调了遵守网站规则和尊重隐私的重要性。
30 2
|
2天前
|
数据采集 定位技术 Python
Python爬虫IP代理技巧,让你不再为IP封禁烦恼了! 
本文介绍了Python爬虫应对IP封禁的策略,包括使用代理IP隐藏真实IP、选择稳定且数量充足的代理IP服务商、建立代理IP池增加爬虫效率、设置合理抓取频率以及运用验证码识别技术。这些方法能提升爬虫的稳定性和效率,降低被封禁风险。
|
2天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
25 0
|
2天前
|
数据采集 Web App开发 开发者
探秘Python爬虫技术:王者荣耀英雄图片爬取
探秘Python爬虫技术:王者荣耀英雄图片爬取