Python爬虫实战案例——第七例

news/2024/7/19 10:18:36 标签: 爬虫, python

文章中所有内容仅供学习交流使用,不用于其他任何目的!严禁将文中内容用于任何商业与非法用途,由此产生的一切后果与作者无关。若有侵权,请联系删除。

目标:LI视频采集

地址:aHR0cHM6Ly93d3cucGVhcnZpZGVvLmNvbS8=

在这里插入图片描述

主页分析

首先要明白我们本次任务的目标——下载页面中的视频(以人物为例),那么也就意味着我们最终的目的就是要找到视频的下载地址。

所以,在进入主页之后我们先来到人物板块这个页面。

在这里插入图片描述

在这里我们想要采集最新的数据,所以就需要定位到最新视频的标签。这里就可以直接打开开发者工具进行分析了。

在这里插入图片描述

可以看到最新视频是位于idcategoryListul标签之中。同时每一个视频就是一个li标签,那么到这里我们只需要确定这些数据是静态化存在于html结构中就能够使用xpath将其解析出来。直接刷新页面然后来到document

在这里插入图片描述

从这里来看可以确定我们能够直接使用xpath去解析这第一页的视频的详情页地址了(解析到但是不一定要去访问,这里我先写代码的时候就按照常规思路去访问了详情页然后找视频地址,但写过去之后发现视频地址是做了反爬处理的,从详情页也无法直接获取到)。

详情页分析

根据普遍的思路,我们访问详情页的目的就是要找视频的播放下载地址,所以我们来到主页之后一样先打开开发者工具,然后点击播放按钮进行抓包分析。

在这里插入图片描述

刷新播放之后抓到一个mp4文件,将url复制到浏览器访问会发现这就是视频的下载地址。那么问题就是这个地址从哪里来的呢,我们可以通过搜索url中 的一些特殊的字符查看,例如这些数字组合,根据以往的经验判断这些数字串必然是这个视频的id,而id必然就是唯一的存在。

在这里插入图片描述

但是如上图所示,我们从响应页面去搜索的话,是没有这个串的,那么也就意味着我们代码去访问详情页的话是无法获取到这个视频的播放地址的。所以这里就需要我们好好想想这个请求的流程了。首先对于浏览器来说,需要播放视频的时候,那么浏览器肯定是要对视频地址请求的,那请求的时候这个视频的播放地址必然在请求前已经是拿到了浏览器中,所以,播放前的播放地址,必然是位于动态加载或者静态的某一个文件当中。那么我们就来进行全局搜索查看一下。

在这里插入图片描述

动态静态两边的文件都搜索一下,最后在动态加载的包中找到了一个名为videoStatus.jsp的包,在这里面我们发现了一个MP4的播放地址(这个地址是有坑的,前面提过,但是大家可以先不看后面的内容,自己往后先写一下代码看看是否能够自己将这个坑填上)

所以,就是说我们在下载之前需要先访问这个videoStatus.jsp来获取视频地址,但是呢,在访问这个videoStatus.jsp的时候会发现如下问题。

在这里插入图片描述

这个呢明显就是网站的一个小反爬手段了,但是都不用去实践就知道问题必然是出在头信息里面,同一个浏览器(浏览器本案例中没有清理过也没有重新打开过)从网站访问的时候是正常的,但是复制url到新标签页访问就无法访问了,这明显和防盗链就算没有100%的关系那也有个99%了,所以这里将referer添加到请求头之后访问就能够成功了。

接下来说一下这个包中的播放地址的坑。

直接上对比,请看下方两个url,其中一个是访问videoStatus.jsp获取到的播放地址,一个是我们从media中找到的播放地址。

https://video.pearvideo.com/mp4/adshort/20200909/1698642033243-1427-203145_adpkg-ad_hd.mp4

https://video.pearvideo.com/mp4/adshort/20200909/cont-1696358-1427-203145_adpkg-ad_hd.mp4

上面一个url是响应来的播放地址,下面一个url是抓包分析是media中的地址,将两个地址分别进行访问会发现上面个是无法访问的。

所以就需要我们手动将url进行修改才能够通过代码进行视频下载了。

这里处理起来也是比较容易得,我们很容易发现不同点就在**/**分割后的最后一部分,所以我们只需要将1698642033243改成cont-1696358就能够下载视频了

最后,关于翻页,翻页在本站中是动态页面加载的,当我们往下翻翻到最底部的时候就会加载出新的页面,所以我们就找到对应的参数进行修改即可。在本站中控制翻页的参数为start,跨度为24,只需要修改这个参数就OK,老生常谈的东西就不在浪费字数浪费时间了。

完整代码请移步:https://gitee.com/shuailiuquan/


http://www.niftyadmin.cn/n/5135238.html

相关文章

React 中 setState详解

最近复习了一些关于react的基础&#xff0c;记录一下&#xff0c;setState使用的细节。 setState的异步更新 自定义事件中为异步更新 <div><h2>{this.state.message}</h2><button onClick{e > this.changeText()}>改变文本</button></div…

黑豹程序员-架构师学习路线图-百科:Log4j 业务日志代码分离

文章目录 1、什么是Log4j&#xff1f;2、发明了日志级别3、为什么要使用Log4j 1、什么是Log4j&#xff1f; Log4j是Apache的一个开源项目&#xff0c;它有三大组件&#xff1a; 1、Logger&#xff1a; 日志对象&#xff0c;负责捕捉日志记录信息&#xff1b; 2、Appender&am…

react和vue的区别

react和vue区别的主要区别 React和Vue是两种流行的JavaScript库&#xff0c;用于构建用户界面。它们有一些区别&#xff0c;包括以下几个方面&#xff1a; 学习曲线&#xff1a; React相对来说更简单&#xff0c;因为它只关注视图层&#xff0c;而且有较少的概念和API。Vue则提…

JavaScript中,一个字符串A在另外一个字符串B中重复出现,需要从B中去除A包括A之前和A之后的若干字符串

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>重复除去一个字符串前若干和后若干个字符</title> </head> <body> <h1>我的网页</h1> <p id"demo">我的第一…

RSA加解密

头一次接触算法 啊好困 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;算法是一种非对称加密算法 密钥生成&#xff1a;选择两个大质数p和q&#xff0c;计算它们的乘积n p * q。然后选择一个与φ(n)&#xff08;n的欧拉函数&#xff09;互质的整数e&#xff0c;通常选择65…

机器狗装上 ChatGPT 大脑当导游;AI 正在学习「超人的说服力」丨 RTE 开发者日报 Vol.73

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

AM@微元法和定积分的应用@平面图形面积@立体体积@曲线弧长

文章目录 abstract微元法平面图形的面积极坐标上图形面积曲边扇形面积 平行截面面积为已知的立体体积旋转体的体积绕 x x x轴旋转绕 y y y轴旋转另一类型旋转体积 曲线弧长参数方程表示的曲线弧长直角坐标方程表示的曲线弧长极坐标方程表示得曲线弧长小结 abstract 微元法定积…

基于SSM的乐器购物网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…