目录

一、什么是防盗链?其作用/原理是什么?

概念:

作用:

原理:

如何进行防盗链保护:

二、步骤分析

2.1、运行环境

2.2、目标

2.3、页面分析

2.3.1、进入主页面,尝试分析源代码

2.3.2、分析页面视频标签元素

2.3.3、分析页面源文件

2.3.4、解决js渲染-->抓包

2.3.5、防盗链解决并解析

三、完整代码

四、结果

五、总结与改进


一、什么是防盗链?其作用/原理是什么?

概念:

防盗链是采用服务器端编程,通过URL过滤技术实现的防止盗链(防止获取真实链接)的技术。要显示的内容不在自己的服务器上,而是通过技术(JS等),绕过别人的最终页面,直接在自己的页面向用户提供内容。

作用:

1)防止内容被窃取

2)防止页面被攻击

原理:

从HTTP协议说起,在HTTP协议中,有一个表头字段:referer,采用URL的格式来表示从哪一个链接跳转到当前的网页或者文件。我的理解是:你(客户机)具体从哪里来,我(服务器)可以进行溯源。一旦检测来源不是网页所规定的,立即进行阻止或者返回指定的页面。

如何进行防盗链保护:

1)网站服务器是apache,可以使用apache自带的Url Rewrite功能进行保护,其原理是检查referer,如果referer的信息来自其他网站则重定向到指定的页面或者图片上;

2)网站服务器是IIS,需要使用第三方插件来实现防盗链功能,例如:ISAPI_Rewrite,可以实现类似apache的防盗链功能。

二、步骤分析

2.1、运行环境

电脑系统:win10家庭版

编辑器:pucharm edu

浏览器:我用的是搜狗、火狐(几乎任何搜索引擎都可以)

2.2、目标

视频网站,梨视频,获取该网站的部分视频;

2.3、页面分析

2.3.1、进入主页面,尝试分析源代码

(目的是为了看我们所需的视频链接是否在页面源代码),右键页面空白处,点击审查元素(要先知道视频的标签名称是什么才好在页面源代码找);

2.3.2、分析页面视频标签元素

(此时已经进入审查元素)

发现视频被包含在有阴影的标签,我们尝试打开

跳转到播放视频界面,我们按照之前的步骤,继续审查元素,查看视频具体的标签内容包含在一部分

可以知道,视频是被video标签包含着的,我们需要的是src的播放链接;

2.3.3、分析页面源文件

鼠标右键打开当前播放视频页面源文件,查找video标签;

按下快捷查找,Ctrl+F ,输入<video,为啥不直接输入video呢?因为我们要找的是video标签,而标签的左边一定是“<”这个符号,可以看到搜索结果是0;

那我们在页面源代码找不到标签,我们就可以合理的推测,这个页面显示出来的东西(起码说视频的实际播放链接),应该是js经过二次处理,渲染出来的内容;

解决办法:

打开搜索引擎自带的抓包工具(自己下载的抓包工具也行,本次使用的是搜索引擎自带的),抓XHR类型的包(这个包是js处理的),注意要再次发起请求(所以要在url栏按下回车);

2.3.4、解决js渲染-->抓包

进入搜索引擎的开发者模式,按照图片所示的数字依次完成;

抓到这个包,进行分析

headers(请求头),Preiview(映射) ,Response(响应),一般来说是分析这三个,在Rreview发现有一个链接,好像和我们之前在标签video看到的链接有一点点像;

把这两个链接都复制出来进行比较;

# 这个是审查元素看到的链接
src="https://video.pearvideo.com/mp4/short/20171111/cont-1196816-11111620-hd.mp4"# 这个是我们抓包看到的链接
srcUrl: "https://video.pearvideo.com/mp4/short/20171111/1667454066881-11111620-hd.mp4"# 抓包看到的
systemTime: "1667454066881"# 我们在播放视频时,页面url栏的地址
https://www.pearvideo.com/video_1196816# 比较
https://video.pearvideo.com/mp4/short/20171111/cont-1196816-11111620-hd.mp4(可以播放)
https://video.pearvideo.com/mp4/short/20171111/1667454066881-11111620-hd.mp4(不能播放)很容易就能得出结论:经过js处理,把实际链接的cont-1196816部分替换成了1667454066881(systemTime)那么我们进行处理,把抓包的链接进行拼接,就能得到真正可以进行播放的链接,进而进行下载

代码:

import requests
def down_src():
url = "https://www.pearvideo.com/video_1160135"video_id = url.split("_")[-1]  # 把cont-后面的数字提取出来video_url = f"https://www.pearvideo.com/videoStatus.jsp?contId={video_id}"  # 拼接请求urlheader = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0",}resp = requests.get(video_url, headers=header)print(resp.text)

说明:我们要请求到的url很明显是抓包里的headers的url,然后把要拼接的url请求出来(简单处理反爬,加上一个请求头),因为我们要这个包的内容,当然要请求到这个请求里的url;

以上代码调用并运行结果:

很明显,我们能播放视频,但是显示的内容是文章已经下线,很明显是被反反爬了;

下面进行处理:

2.3.5、防盗链解决并解析

如下流程图1、2、3

图1

图2

图3

解决办法,

很多网页的防盗链,是加入了一个Referer,进行溯源;我们把这个参数加到请求中进行尝试;

代码如下:

import requests
def down_src():
referer = "https://www.pearvideo.com/video_1160135"video_id = referer.split("_")[-1]  # 把cont-后面的数字提取出来video_url = f"https://www.pearvideo.com/videoStatus.jsp?contId={video_id}"  # 拼接请求urlheader = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0","referer": referer}resp = requests.get(video_url, headers=header)print(resp.text)

调用并运行的结果:

可以看到,已经成功拿到了要使用的srcUrl,接下来可以进行拼接;

思路:因为现实出来的内容是json格式,我们可以把这些内容赋值给一个字典,然后在字典里进行提取需要的内容,进行拼接即可

拼接部分的代码:

resp = requests.get(video_url, headers=header)
dit = resp.json()
src_url = dit['videoInfo']['videos']['srcUrl']
systime = dit['systemTime']
src_url = src_url.replace(systime, f"cont-{video_id}")
print(src_url)

三、完整代码

import requestsdef down_src():referer = "https://www.pearvideo.com/video_1160135"  # url栏的链接video_id = referer.split("_")[-1]  # 把cont-后面的数字提取出来video_url = f"https://www.pearvideo.com/videoStatus.jsp?contId={video_id}"  # 拼接请求urlheader = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0","referer": referer}resp = requests.get(video_url, headers=header)dit = resp.json()src_url = dit['videoInfo']['videos']['srcUrl']systime = dit['systemTime']src_url = src_url.replace(systime, f"cont-{video_id}")print(src_url)# 下载视频with open("1.mp4", mode="wb") as f:f.write(requests.get(src_url).content)if __name__ == '__main__':print("开始爬取")down_src()print("爬取结束")

四、结果

爬取到的链接可以播放,并且把该链接的内容保存到当前文件夹下(也可播放);

五、总结与改进

总结:

5.1、需要的内容不在页面源代码里怎么解决?

5.2、遇到防盗链怎么解决?

5.3、一次性爬取很多视频内容怎么解决呢(因为页面源代码没有这些链接)?

改进:

5.4、规范代码

5.5、爬取速度慢要解决

Python--爬虫,了解防盗链-->解决防盗链,解决反反反爬相关推荐

  1. 【Python爬虫:唯美girl,charles解决反调试】

    Python爬虫:唯美girl,charles解决反调试 Python爬虫:唯美girl,不让F12,我就要! 前言 1.目标简要说明 2.解决无法打开浏览器开发者工具 2.1解决思路 2.2思路具体 ...

  2. 【python爬虫专项(31)】链家二手房源数据采集4(噪声数据处理)

    清洗数据来源 数据是来自于python爬虫专项(28)和(29)里面采集的分页信息和深度信息,如下 1) data_1表格下面获取的分页信息 2) data_2表格下面获取的深度信息 清洗逻辑:[函数 ...

  3. Python 爬虫数据写入csv文件中文乱码解决以及天眼查爬虫数据写入csv

    python爬虫数据写入csv文件中文乱码,用'utf-8'在pycharm中打开文件没有问题,但是用excel打开却出现了问题,以下为解决方法. (最近在练习爬虫,这个博文是对自己学习的记录和分享, ...

  4. 【Python爬虫】2022年数学建模美赛B题数据爬取

    2022年数学建模美赛B题数据爬取 背景 2022年的美赛刚刚落下帷幕,该题的一个主要难点在于数据的获取.很多人无法找到有效的数据,或者是无法获取数据. 比如找到了如下米德湖的水文数据,但是发现并没有 ...

  5. Python爬虫:(亲测,已解决!)解决在使用谷歌浏览器的开发者工具时,没有Referer防盗链缺失问题。

    今天,我在做Python网络爬虫时(web spider),正在爬取哔哩哔哩的某一个视频,发现一个致命问题,就是单纯在headers中加入UA(user-Agent)是不够的,也就是说,我的爬虫没有足 ...

  6. 【python爬虫专项(28)】链家二手房源数据采集1(分页信息采集)

    链家二手房源信息采集 这里以采集 北京二手房源 为例,要进行获取的字段如下 爬虫逻辑:[分页url获取]–> [页面列表数据的获取] 函数式编程: 函数1:get_urls(city_url,n ...

  7. 【python爬虫专项(29)】链家二手房源数据采集2(深度信息采集)

    链家二手房源数据深度采集 这部分的实践是基于上一个博客获得的数据,具体的参考网址如下: 爬虫逻辑 :[提取mongo里面的具体网页的链接]–> [设置动态ip]–> [获取详细信息] 函数 ...

  8. Python爬虫入门【16】:链家租房数据抓取

    1. 写在前面 作为一个活跃在京津冀地区的开发者,要闲着没事就看看石家庄这个国际化大都市的一些数据,这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材. 我们需要爬取 ...

  9. 有了代码怎么用python爬虫_如何大量做外链 不仅正规而有效果

    什么是外链?众所周知,外链就是整个网络上除了自身站内而指向自己站点的连接就是外链,搜索引擎从诞生到现在对于这种导入连接对网站权重的影响一直占据着重要的位置,所以本文讲教大家如何大量的做外链,不仅仅正规 ...

  10. python爬虫(2.获取网页外链与内链)

    from urllib.request import urlopen from urllib.parse import urlparse from bs4 import BeautifulSoup i ...

最新文章

  1. 第二阶段第八次spring会议
  2. VMware将世界领先的云访问安全代理合作伙伴纳入移动安全联盟
  3. Oracle中的数据类型和数据类型之间的转换
  4. 004_JDK的String类对Comparable接口的实现
  5. 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序
  6. delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
  7. 2016021701 - 百位名人读书心法01
  8. dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul
  9. C++跨平台开发方法/工具
  10. Navicat工具导出Mysql数据表结构到Excel文件中
  11. Java中的各种锁事
  12. 开源硬件_扩展对开源硬件的访问
  13. 极光IM JAVA后台对接
  14. AutoCAD Civil 3D 2015-2020
  15. Java编写MD5加密工具类,登录密码加密
  16. python爬取拉钩网招聘信息分析
  17. Linux文件---文件锁
  18. “一键”控制 STM32 的 NRST 和 BOOT0
  19. You are using pip version 8.1.2, however version 21.3.1 is available pip安装docker-compose版本问题解决
  20. SFR 原理分析 代码

热门文章

  1. 原来是这么做的,新手小白做自媒体,1个视频可以获取10份收益
  2. ICCV 2021 放榜!一文看尽10篇论文的开源项目(检测/分割/Transformer等)
  3. 电竞CSGO数据API接口 - 【即时指数】API调用示例代码
  4. 实现FPGA Verilog HDL与NIOS II的通信数据交换——利用AVALON总线
  5. Ubuntu18.04 安装Etcher——开源USB镜像写入工具
  6. QT多线程接收串口数据
  7. java中的onresume_android onCreate onResume中获取 View 宽高为0分析
  8. python安装目录查看_centos下查看python的安装目录
  9. spring boot 之配置文件yarm读取04
  10. Java解码vhd的磁盘文件,vhd镜像格式及vhd-util工具应用