【Python】爬虫下载视频
Python爬虫下载视频
前言
这两天我一时兴起想学习 PS ,于是去我的软件宝库中翻出陈年已久的 PhotoshopCS6 安装,结果发现很真流畅诶!
然后去搜索学习视频,网上的视频大多浮躁,收费,突然想到了我入门编程时学习的网站, 我要自学网 ,寻找当时非常喜欢的易语言编程视频,很可惜,没有了。而且发现网站似乎不那么好用了QAQ。
找啊找,找啊找,找到了一个同类型,界面很古老的学习网站, 51视频学院(禁不住好奇,似乎很多那个时候的网站都喜欢51开头,比如吾爱论坛,51巅峰阁...) ,发现上面的ps视频还可以,但是我家的网速是不是老卡,所以想一下子都下载完,然后就慢慢本地看啦!不再受网络的影响。 想到这种事情,就立马想到了Python。

Python搞起!
分析
寻找视频地址
右键网页点击检查,先刷新一下网页,然后点击网络选项卡。
这个网站属于比较老啦,哈哈,我这样的爬虫小白白都能爬,直接点击媒体,我们就能发现视频的请求地址啦,也就是下载地址。
啊哈,果不其然,复制链接后打开就可以下载视频了!
获取视频地址
这就是我们寻找到的视频地址啦,但是怎么知道其他视频的地址呢?注意看红色方框的内容

这个时候,让我们回到这个课程的目录页看看
欸欸欸?是不是看到了点东西?没错,相信眼光敏锐的你已经看到啦,视频地址的后面的1-1就是课程的章节序号啦!那我们去试几个,发现也是可行的!
所以我们从目录网页上获取那个章节序号就好啦,顺便把后面的文字也获取了,当成文件名。不然都不知道视频的内容是什么。总而言之,流程大致为从目录获取章节序号->下载视频->保存到本地。
写代码!
获取章节序号及内容
这里用到了XPath,不会的 点我看看, 很简单的。
代码:
import requests
from lxml import etree list_url = "http://www.51shiping.com/list-657-1.html"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}
response = requests.get(list_url,headers=headers)
text = response.text
# 解析
html = etree.HTML(text)
titles = html.xpath("//div[@align='left']/a/text()")
for title in titles:
print(title)
结果:

完美!第一步大功告成
但是,在编写下面是发现一个隐藏的坑点,那就是 空格是'\ax0',你输出titles就知道我说的什么意思了 ,下图是titles数组实际存的内容:

所以下面分割字符串时候要以\ax0分割。
试下载一页的视频
import requests
from lxml import etree list_url = "http://www.51shiping.com/list-657-1.html"
v_url = "http://www.51shiping.com/uploadfiles/jiaochen/pscs7/mp9/" # 视频地址,用于拼接
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}
response = requests.get(list_url,headers=headers)
text = response.text
# 解析
html = etree.HTML(text)
titles = html.xpath("//div[@align='left']/a/text()")
# 下载
for title in titles:
#unicodedata.normalize('NFKC', titles[i]) # 去掉\xa0这样的空白字符
file_dir = 'E:/PSVideo/{}.mp4'.format(title) # 保存的路径和文件名
order = title.split('\xa0')[0] # 每节的编号
video_url = v_url+order.split('.')[0]+'-'+order.split('.')[1]+'.mp4' # 拼接视频下载地址
print(title+'正在下载中...请耐心等待');
# 下载视频
with open(file_dir,'wb') as f:
f.write(requests.get(video_url,headers=headers).content)
f.flush()
print(video_url)
print(file_dir+' 已经下载成功!');
结果:

我这里网速可能还是有点慢,(同时我也怀疑是它的服务器太老啊哈哈)。
下载所有页的视频
import requests
from lxml import etree def getVideo(n):
# 访问目录网页,n为目录的页数
list_url = "http://www.51shiping.com/list-657-{}.html".format(n)
v_url = "http://www.51shiping.com/uploadfiles/jiaochen/pscs7/mp9/" # 视频地址,用于拼接
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}
response = requests.get(list_url,headers=headers)
text = response.text
# 解析
html = etree.HTML(text)
titles = html.xpath("//div[@align='left']/a/text()")
# 下载
for title in titles:
#unicodedata.normalize('NFKC', titles[i]) # 去掉\xa0这样的空白字符
file_dir = 'E:/PSVideo/{}.mp4'.format(title) # 保存的路径和文件名
order = title.split('\xa0')[0] # 每节的编号
video_url = v_url+order.split('.')[0]+'-'+order.split('.')[1]+'.mp4' # 拼接视频下载地址
print(title+'正在下载中...请耐心等待');
# 下载视频
with open(file_dir,'wb') as f:
f.write(requests.get(video_url,headers=headers).content)
f.flush()
print(video_url)
print(file_dir+' 已经下载成功!'); if __name__ == "__main__":
for n in range(1,7):
getVideo(1)
这个结果我就不再演示啦,(网速慢的我)
总结
该项目利用了requests+XPath知识实现,不是很难,我是一个初学爬虫的小白,都能实现,更何况你呢~
如果能给你正在写的项目一点启发,那更是好啦!哈哈,如果觉得还可以,记得给我点个赞哦~你的赞就是对我最大的鼓励!

【Python】爬虫下载视频的更多相关文章
- python爬虫下载文件
python爬虫下载文件 下载东西和访问网页差不多,这里以下载我以前做的一个安卓小游戏为例 地址为:http://hjwachhy.site/game/only_v1.1.1.apk 首先下载到内存 ...
- Python爬虫下载Bilibili番剧弹幕
本文绍如何利用python爬虫下载bilibili番剧弹幕. 准备: python3环境 需要安装BeautifulSoup,selenium包 phantomjs 原理: 通过aid下载bilibi ...
- python爬虫下载小视频和小说(基础)
下载视频: 1 from bs4 import BeautifulSoup 2 import requests 3 import re 4 import urllib 5 6 7 def callba ...
- python爬虫学习视频资料免费送,用起来非常666
当我们浏览网页的时候,经常会看到像下面这些好看的图片,你是否想把这些图片保存下载下来. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片点击鼠标右键的时候并没有另存为选项,或者你可以通过截图工 ...
- python you-get 下载视频
python使用you-get模块下载视频 pip install you-get # 安装先 怎么用 进入命令行: you-get url 暂停下载:ctrl + c ,继续下载重复 y ...
- 用python you-get下载视频
安装python3后 安装you-get包: pip3 install you-get 下载视频: 打开windows终端:运行 you-get url 查看视频信息: you-get -i url ...
- Python 爬虫 Vimeo视频下载链接
python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...
- python爬虫下载youtube单个视频
__author__ = 'Sentinel'import requestsimport reimport jsonimport sysimport shutilimport urlparse &qu ...
- Python爬虫下载美女图片(不同网站不同方法)
声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...
- Python爬虫下载酷狗音乐
目录 1.Python下载酷狗音乐 1.1.前期准备 1.2.分析 1.2.1.第一步 1.2.2.第二步 1.2.3.第三步 1.2.4.第四步 1.3.代码实现 1.4.运行结果 1.Python ...
随机推荐
- Less-3 和 Less-4 ')闭合绕过
判断注入类型 测试:http://localhost/sqli-labs-master/Less-3/index.php?id=1a 正常回显,可以判断为 字符型注入 闭合字符串执行而已 SQL语句 ...
- 痞子衡嵌入式:在i.MXRT1060-EVK上利用memtester程序给SDRAM做压力测试
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在i.MXRT1060-EVK上利用memtester程序给SDRAM做压力测试. 我们知道恩智浦i.MXRT1xxx系列是高性能MCU ...
- Android笔记--对话框
提醒对话框AlertDialog 具体实现: 相关用法: 日期对话框DatePickerDialog DatePicker 具体实现: 使用Dialog选择日期: 时间对话框TimePickerDia ...
- Spring--案例:百度网盘密码数据兼容处理
案例再度来袭 也就是说,在百度网盘的密码复制时,后面即使有空格也能提取成功(trim方法) 案例的实现: 也就是实现存在空格时,也能输出true: 现在的话: 那么,我们应该如何使得它忽略空格呢? 这 ...
- Java面试——缓存
一.什么是缓存 [1]缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取.由于缓存的数据比磁盘快的多,所以缓存的作用就是帮 ...
- Markdown/Latex常用数学公式语法
0. 写在前面:MarkDown快捷键总结 名称 语法 快捷键 标题 用#号表示,#一级标题,##表示二级标题,依次类推 Ctrl+1.2.3.4 字体加粗 左右用**包裹起来 Ctrl+B 斜体字 ...
- 基于列存储的开源分布式NoSQL数据库Apache Cassandra入门分享
@ 目录 概述 定义 特性 与Hbase对比 Cassandra使用场景 术语 架构 概览 Dynamo 数据集分区使用令牌环的一致性哈希 存储引擎 部署 单实例部署 集群部署 CQL 概述 数据模型 ...
- ACM-学习记录-数论
GCD,LCM 定理 a.b两个数的最大公约数乘以它们最小公倍数等于a和b的乘积 axb=GCD(a,b)xLCM(a,b) 据此定理,求3与8的最小公倍数可以为:LCM(3,8)=3x8divGCD ...
- 统计模拟实验—R实现(蒲丰投针)
统计模拟实验 统计模拟是数理统计.和计算机科学的结合,是一门综合性学科.在科学研究和生产实际的各个领域中,普遍存在着大量数据的分析处理工作.如何应用数理统计中的方法来解决实际问题,以及如何解决在应用中 ...
- kubernetes 的TCP 数据包可视化
kubernetes 的TCP 数据包可视化 介绍 k8spacket是用 Golang 编写的工具,它使用gopacket第三方库来嗅探工作负载(传入和传出)上的 TCP 数据包.它在运行的容器网络 ...