Python 爬虫之下载视频(四)

爬取某投币视频平台的小视频


文章目录

  • 爬取某投币视频平台的小视频
  • 前言
  • 一、基本内容
  • 二、基本思路
  • 三、代码编写
    • 1.引入库
    • 2.设置手机模式
    • 3.跳过手动点击等操作
    • 4.获取视频下载地址
    • 5.获取视频标题
    • 6.下载保存
  • 总结


前言

这篇用来记录一下如何爬取这个平台的视频,比如一些Python的教程小视频(一个视频四五分钟的那种的),效果还是不错的。

举例,如下图所示:
在这里插入图片描述
在这里插入图片描述


一、基本内容

打开一个正在播放的网页页面,获取视频标题和下载链接,在本地保存成mp4格式的视频文件。


二、基本思路

  1. 获取视频下载链接,电脑网页检查元素定位到的是blob转换的url地址(用不了),视频标题不影响。
  2. 需要电脑网页开启手机模式(开发者模式里可以设置),这里的定位到的url是可以用的。
  3. 以上可得,在爬取的时候,需要程序代码以手机模式进行爬取(跟之前的教程一样,只不过是多个一个这个步骤)。
  4. 像之前的教程一样,去爬取下载就可以。

三、代码编写

1.引入库

代码如下:

import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

2.设置手机模式

代码如下:

# 打开电脑浏览器,以手机模式运行
chrome_options = webdriver.ChromeOptions()# 模拟一种存在的手机设备类型
chrome_options.add_experimental_option("mobileEmulation",{'deviceName': 'iPhone XR'})# 创建一个实例对象,添加配置项
driver = webdriver.Chrome(options=chrome_options)# 在执行任何查找元素的操作时等待时间
driver.implicitly_wait(5)# 要爬取的网页地址
driver.get("网页地址")
time.sleep(5)

这里主要讲了两个点:一是将网页模式设置成了 iPhone XR 手机模式;二是在执行任何查网页找元素的操作时等待时间,为了给网页反应的时间。然后输入网页地址。


3.跳过手动点击等操作

代码如下:

# 页面打开点击播放按钮
play_icon = driver.find_element(by=By.CSS_SELECTOR, value='.main-cover')
play_icon.click()# 等窗口弹出来
time.sleep(3)# 点击继续网页播放
to_see = driver.find_element(by=By.CSS_SELECTOR, value='.to-see')
to_see.click()
time.sleep(3)

大家都懂得,厂商都想让你跳转到app看,但是也有不显眼的在网页继续观看,上面的代码就是解决这个问题的。


4.获取视频下载地址

代码如下:

# 视频下载地址
# 定位到包含 video 标签的 div 元素
movie_div = driver.find_element(by=By.CSS_SELECTOR, value='.mplayer-video-wrap')# 在 div 元素中查找 video 标签
video_element = movie_div.find_element(By.TAG_NAME, "video")# 获取 video 标签的 src 属性值
movie_url = video_element.get_attribute("src")# 打印下载地址
print(movie_url)

这是获取下载地址的一个嵌套逻辑,要想理解需要大家去实际操作一下。


5.获取视频标题

代码如下:

## 视频标题
movie_title = driver.find_element(by=By.CSS_SELECTOR, value='.part-item.on').text.strip()# 打印视频标题
print(movie_url)

标题的获取到时不难,就两行代码。
或者去这个东西主要是为了给下载的视频起名字,对号入座,好区分。


6.下载保存

代码如下:

# 视频头部信息,做验证用
headers = {'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
}# 获取到视频
response = requests.get(movie_url, headers=headers)
chunk_size = 1024 * 1024 * 2# 开始下载保存文件
with open(f'{movie_title}.mp4', 'wb') as f:for chunk in response.iter_content(chunk_size=chunk_size):f.write(chunk)# 打印下载完成的消息
print(f'下载完了!!{movie_title}.mp4')

总共四部分:

  1. 验证头部信息(相当于获取下载视频的权限)。
  2. 获取到视频的信息。
  3. 开始下载保存文件。
  4. 打印下载完成的消息。

总结

到这里,主要部分就大功告成了。图片中的动态进度条没加进来,太多了大家看着也烦,主要的东西告诉大家就OK了。

需要的请点击《Python 小程序之动态进度条》的链接:https://only-me.blog.csdn.net/article/details/134937611

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295898.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity矩阵平移旋转缩放Matrix4x4

Unity矩阵平移旋转缩放Matrix4x4 Unity中的矩阵(Matrix4x4)创建自定义模型平移矩阵缩放矩阵旋转矩阵 Unity中的矩阵(Matrix4x4) 最近在研究帧同步定点数物理系统中需要自定义定点数矩阵,所以在这里分享下基础的矩阵案…

每日一题——LeetCode860

个人方法: 用change数组保存我们拥有的零钱的数量,change数组只有change[5]、change[10]、change[20]是有效的,其值代表了不同面值的零钱拥有多少张 顾客付了多少钱,先把钱存入零钱数组,然后计算需要找零的金额&…

Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成:pytestrequestsallure设计模式: 关键字驱动项目结构: 工具层:api_keyword/参数层:params/用例层:case/数据驱动:data_driver/数据层:data/逻辑层&#xff1a…

消息队列之关于如何实现延时队列

一、延时队列的应用 1.1 什么是延时队列? 顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的,尤其像…

手写题 - 实现一个带并发限制的异步调度器

题目 实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有N个。 完善下面代码中的 Scheduler 类,使得以下程序能正确输出:class Scheduler {add(promiseCreator) { ... }// ... }const timeout (time) > new Promise(re…

Quartz.NET 事件监听器

1、调度器监听器 调度器本身收到的一些事件通知,接口ISchedulerListener,如作业的添加、删除、停止、挂起等事件通知,调度器的启动、关闭、出错等事件通知,触发器的暂停、挂起等事件通知,接口部分定义如下&#xff1a…

[已解决]HttpMessageNotReadableException: JSON parse error: Unexpected character:解析JSON时出现异常的问题分析与解决方案

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

C# SixLabors.ImageSharp.Drawing的多种用途

生成验证码 /// <summary> /// 生成二维码 /// </summary> /// <param name"webRootPath">wwwroot目录</param> /// <param name"verifyCode">验证码</param> /// <param name"width">图片宽度</…

Docker - 镜像 | 容器 日常开发常用指令 + 演示(一文通关)

目录 Docker 开发常用指令汇总 辅助命令 docker version docker info docker --help 镜像命令 查看镜像信息 下载镜像 搜索镜像 删除镜像 容器命令 查看运行中的容器 运行容器 停止、启动、重启、暂停、恢复容器 杀死容器 删除容器 查看容器日志 进入容器内部…

【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)

前面几篇文章介绍的是排序算法&#xff0c;现在让我们开始排序算法的专项练习。 目录 判断题选择题填空题1.插入排序2.另类选择排序3.冒泡排序4.快速查找第K大元 判断题 1.希尔排序是稳定的算法。&#xff08;错&#xff09; 解析&#xff1a;稳定性是指如果两个元素在排序前后…

如何实现酷狗音乐pc页面点击播放时,打开多个歌曲播放时,始终在一个播放页面,(标签页的通讯)

大致有两种思路&#xff0c; 一种是通过wind.open()方法传第二个参数&#xff0c; A页面&#xff1a; //点击跳转播放页函数function toPlayPage(){window.open(path/xxxx/xxxx?name音乐名,music)//第二个参数写一个定值&#xff0c;代表跳转页面都为music标签页&#xff0…

vue.js组件的应用(Vite构建)

一.组件的定义和应用 1.全局组件 全局组件是指在任何页面中不必再单独引入组件并注册&#xff0c;直接在模板中使用组件名称就可以引用的组件。 全局组件注册方法一 先在src目录下新建一个globalComponents文件夹&#xff0c;再新建一个Header.vue的全局组件。 <templa…