「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的相关操作二

相关文章
|
27天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
10天前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
29天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
1月前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
90 6
|
8天前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
12天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
15天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
13天前
|
数据采集 JavaScript 前端开发
Python爬虫能处理动态加载的内容吗?
Python爬虫可处理动态加载内容,主要方法包括:使用Selenium模拟浏览器行为;分析网络请求,直接请求API获取数据;利用Pyppeteer控制无头Chrome。这些方法各有优势,适用于不同场景。
|
21天前
|
数据采集 监控 搜索推荐
python爬虫的基本使用
本文介绍了Python爬虫的基本概念及其广泛应用,包括搜索引擎、数据挖掘、网络监控、舆情分析和信息聚合等领域。通过安装`urllib`和`BeautifulSoup`库,展示了如何编写简单代码实现网页数据的抓取与解析。爬虫技术在大数据时代的重要性日益凸显,为各行业提供了高效的数据获取手段。
31 1