Python爬虫下载视频

前言

这两天我一时兴起想学习 PS ,于是去我的软件宝库中翻出陈年已久的 PhotoshopCS6 安装,结果发现很真流畅诶!

然后去搜索学习视频,网上的视频大多浮躁,收费,突然想到了我入门编程时学习的网站, 我要自学网 ,寻找当时非常喜欢的易语言编程视频,很可惜,没有了。而且发现网站似乎不那么好用了QAQ。

找啊找,找啊找,找到了一个同类型,界面很古老的学习网站, 51视频学院(禁不住好奇,似乎很多那个时候的网站都喜欢51开头,比如吾爱论坛,51巅峰阁...) ,发现上面的ps视频还可以,但是我家的网速是不是老卡,所以想一下子都下载完,然后就慢慢本地看啦!不再受网络的影响。 想到这种事情,就立马想到了Python。

Python搞起!

分析

  1. 寻找视频地址

    右键网页点击检查,先刷新一下网页,然后点击网络选项卡。

    这个网站属于比较老啦,哈哈,我这样的爬虫小白白都能爬,直接点击媒体,我们就能发现视频的请求地址啦,也就是下载地址。啊哈,果不其然,复制链接后打开就可以下载视频了!

  2. 获取视频地址

    这就是我们寻找到的视频地址啦,但是怎么知道其他视频的地址呢?注意看红色方框的内容

    这个时候,让我们回到这个课程的目录页看看

    欸欸欸?是不是看到了点东西?没错,相信眼光敏锐的你已经看到啦,视频地址的后面的1-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分割。

    2. 试下载一页的视频

      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+' 已经下载成功!');

      结果:

    我这里网速可能还是有点慢,(同时我也怀疑是它的服务器太老啊哈哈)。

  3. 下载所有页的视频

    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】爬虫下载视频的更多相关文章

  1. python爬虫下载文件

    python爬虫下载文件 下载东西和访问网页差不多,这里以下载我以前做的一个安卓小游戏为例 地址为:http://hjwachhy.site/game/only_v1.1.1.apk 首先下载到内存 ...

  2. Python爬虫下载Bilibili番剧弹幕

    本文绍如何利用python爬虫下载bilibili番剧弹幕. 准备: python3环境 需要安装BeautifulSoup,selenium包 phantomjs 原理: 通过aid下载bilibi ...

  3. python爬虫下载小视频和小说(基础)

    下载视频: 1 from bs4 import BeautifulSoup 2 import requests 3 import re 4 import urllib 5 6 7 def callba ...

  4. python爬虫学习视频资料免费送,用起来非常666

    当我们浏览网页的时候,经常会看到像下面这些好看的图片,你是否想把这些图片保存下载下来. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片点击鼠标右键的时候并没有另存为选项,或者你可以通过截图工 ...

  5. python you-get 下载视频

    python使用you-get模块下载视频   pip install you-get # 安装先 怎么用    进入命令行: you-get url 暂停下载:ctrl + c ,继续下载重复  y ...

  6. 用python you-get下载视频

    安装python3后 安装you-get包: pip3 install you-get 下载视频: 打开windows终端:运行 you-get url 查看视频信息: you-get -i url ...

  7. Python 爬虫 Vimeo视频下载链接

    python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...

  8. python爬虫下载youtube单个视频

    __author__ = 'Sentinel'import requestsimport reimport jsonimport sysimport shutilimport urlparse &qu ...

  9. Python爬虫下载美女图片(不同网站不同方法)

    声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...

  10. 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 ...

随机推荐

  1. Nginx如何升级Openssl

    1. 什么是Openssl? 在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份.这个包广泛被应用在互联网的网页服务器 ...

  2. 痞子衡嵌入式:我为2021 TencentOS Tiny AIoT应用创新大赛做了场直播培训

    TencentOS Tiny AIoT 应用创新大赛是腾讯 TencentOS 团队联合恩智浦半导体.安谋科技(Arm China)发起的线上开发者活动,主要面向中小企业嵌入式工程师.广大嵌入式开发者 ...

  3. 发布新版博客备份功能:生成 sqlite 数据库文件,vscode 插件可查看

    大家好,最近我们重新开发了园子的博客备份功能,今天发布第一个预览版,欢迎大家试用. 点击博客后台侧边栏的博客备份进入新版博客备份: 点击创建备份按钮创建博客备份任务(目前每天只能创建一次备份),待备份 ...

  4. 源码解读之FutureTask如何实现最大等待时间

    预备知识:Java 线程挂起的常用方式有以下几种 Thread.sleep(long millis):这个方法可以让线程挂起一段时间,并释放 CPU 时间片,等待一段时间后自动恢复执行.这种方式可以用 ...

  5. offsetX与offsetLeft

    offsetX:鼠标指针距离当前绑定元素左侧距离,他并不是相对于带有定位的父盒子的x,y坐标, 记住了,很多博客都解释错了 offsetLeft,offsetTop 相对于最近的祖先定位元素.

  6. react抽离配置文件、配置@符号、调整src文件夹---配置scss、编写项目的页面结构、创建各个页面 src/views、开始路由、入口文件处修改代码、修改App.js布局文件、添加底部的导航布局、构建个人中心。。。声明式跳转路由、使用React UI库请求渲染首页数据、

    1.回顾 2.react项目的配置 react默认创建的项目配置文件在 node_modules/react-scripts 文件夹内部 2.1 抽离配置文件 cnpm run eject cnpm ...

  7. ACM-CodeForces-#685(Div.2)

    好久没见过CF有这么水的contest了,蒟蒻赶紧找找自信 A. Subtract or Divide #include<iostream> using namespace std; in ...

  8. [ACM]STL-dfs

    #include<iostream> using namespace std; int book[101],sum,n,e[101][101]; void dfs(int cur) { c ...

  9. TypeScript 学习笔记 — 基于对象操作的内置类型的使用(十二)

    目录 1.Partial 转化可选属性 (?) 2.Required 转化必填属性 (-?) 3.Readonly 转化仅读属性 (readonly) Mutate(非内置,与 Readonly 相对 ...

  10. Java面向对象--接口和多态

    final 关键字 最终修饰符 可以修饰 类 方法 变量 被final修饰后不能被继承 重写 二次赋值 修饰类时 该类不可以被继承 修饰方法时 该方法不能被重写 修饰变量时, 该变量只能赋值一次, 不 ...