1. 前言

还在为在线看小视频缓存慢发愁吗?还在为想重新回味优秀作品但找不到资源而忧虑吗?莫要慌,让python来帮你解决,40行代码教你爬遍小视频网站,先批量下载后仔细观看,岂不美哉!

2. 整理思路

这类网站一般大同小异,本文就以凤凰网新闻视频网站为例,采用倒推的方式,给大家介绍如何通过流量分析获得视频下载的url,进而批量下载。

3. 操作步骤

3.1 分析网站,找出网页变化规律

1、首先找到网页,网页详情如下图所示。

2、该视频网站分为人物、娱乐、艺术等不同类型,本文以体育版块为例,下拉到底端,如下图所示。

 3、根据上图的结果,我们可以发现该网站是动态网页,打开浏览器自带流量分析器,点击加载更多,找出网页变化规律,第一个就是,请求网址和返回结果如下图。标记处为页码,此时是第3页。

4、返回结果包含视频的title、网页url、guid(相当于每个视频的标志,后续有用)等信息,如下图所示。

5、每个网页里边包含24个视频,打印出来是这样的,如下图所示。

3.2 寻找视频网页地址规律

1、先打开流量分析器,播放视频进行抓包,找到几个mp2t文件,如下图所示。

2、它们的网址我依次找了出来,放到文本文件中存放起来,以发现它们之间的规律,如下图所示。

3、大家发现规律了吗?网址中的p26275262-102-9987636-172625参数就是视频的guid(上述已经得到),只有range_bytes参数是变化的,而且是从0到6767623,很显然这是视频的大小,而且视频是分段合成的。找到这些规律之后,接下来我们需要继续进行细挖视频地址的出处。

3.3 寻找视频的下载原始地址

1、先考虑一个问题,视频的地址是从哪来的呢?一般情况下,先在视频网页里看看有没有,如果没有,我们就在流量分析器里,沿着第一个分段视频往上找,肯定是有某个网址返回了这些信息,很快,我在1个vdn.apple.mpegurl文件里发现了下图这个。

2、太惊喜了,这不就是我们要找的信息么,再看看它的url参数,如下图所示。

3、上图参数看起来很多的样子,不过不用怕。还是利用老办法,先在网页里看看有没有,没有的话还在流量分析器里往上找,功夫不负有心人,我找到了下图这个。

4、它的url如下图所示。

5、仔细找找规律,我们发现唯一需要变化的就是每个视频的guid了,这个第一步已经得到了。另外,返回结果包含了上述除了vkey的所有参数,而且这个参数最长,那该怎么办呢?

6、不要慌,万一这个参数没有用呢,先把vkey去掉试一试。果不其然,果然没有什么用,现在整个过程已经捋顺了,现在可以撸代码了。

3.4 代码实现

1、在代码里边,设置多线程下载,如下图所示,其中页码可以自己进行修改哈。

2、解析返回参数,json格式的,使用json库进行处理,如下图所示。通过解析,我们可以得到每个视频的title、网页url、和guid。

3、模拟请求,获得除Vkey外的参数,如下图所示。

4、利用上一步中的参数,进行模拟请求,获得包含分段视频的信息,如下图所示。

5、将分段视频合并,保存在1个视频文件,并以title命名,如下图所示。

 3.5 效果呈现

1、当程序运行之后,我们便可以看到网页中的视频哗啦哗啦的在本地文件夹中进行呈现,如下图所示。接下来,妈妈再也不用担心我喜欢的视频找不着了,真香!

当然了,如果想更加直观的话,可以在代码中加入维测信息,这个大家可以自己手动设置一下。

4. 总结

本文主要基于Python网络爬虫,利用40行代码,针对小视频网页,进行批量获取网页视频到本地。方法简单易行,而且行之有效,欢迎大家踊跃尝试。完整代码如下:

 1# -*- coding: utf-8 -*-2import requests3from bs4 import BeautifulSoup4import re5import json6import threading78header = {9        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0'
10    }
11
12def get_href(url): # 提取每个视频所在网页的href,交给get_video_url()函数
13    response = requests.get(url, headers=header)
14    items=json.loads(response.text)
15    for item in items['data']['data']:
16        title=item['title']
17        VideoHtmlUrl='http:'+item['url']
18        Guid=item['guid']
19        print(title,url,Guid)
20        down_load_video(title, VideoHtmlUrl, Guid)
21
22def down_load_video(title, VideoHtmlUrl, Guid): # 下载视频
23    url='https://shankapi.ifeng.com/feedflow/getVideoAuthUrl/{0}/getVideoAuthPath_1'.format(Guid)
24    response=requests.get(url, headers=header)
25    results=json.loads(response.text.replace('getVideoAuthPath_1(','').replace(')', ''))
26    results=results['data']
27    vid = results['authUrl']   # 得到除Vkey外的参数
28    video_url='https://60-28-123-129.ksyungslb.com/video19.ifeng.com/video09/2020/01/08/p26275262-102-9987636-172625/index.m3u8?reqtype=tsl&'+vid
29    response=requests.get(video_url, headers=header)
30    IndexTs=response.text.split('\n')[5:][::2]
31    for i in IndexTs:
32        TsUrl='https://60-28-123-129.ksyungslb.com/video19.ifeng.com/video09/2020/01/08/p26275262-102-9987636-172625/'+i
33        res = requests.get(TsUrl, stream=True, headers=header)  # 根据视频原始地址获得视频数据流
34        with open('{0}.mp4'.format(title.replace('|', '')), 'ab')as f:  # 保存数据流为MP4格式
35            f.write(res.content)
36            f.flush()
37
38def main():
39    pagenum=3
40    for i in range(1, pagenum):
41        url='https://shankapi.ifeng.com/shanklist/getVideoStream/{0}/24/27-95288-/1'.format(i)
42        t=threading.Thread(target=get_href, args=(url,))
43        t.start()
44
45if __name__=='__main__':
46    main()

作者:华为云特约供稿开发者 清风Python

40行代码教你利用Python网络爬虫批量抓取小视频相关推荐

  1. python爬取小视频-40行代码教你利用Python网络爬虫批量抓取小视频

    /1 前言/ 还在为在线看小视频缓存慢发愁吗?还在为想重新回味优秀作品但找不到资源而忧虑吗?莫要慌,让python来帮你解决,40行代码教你爬遍小视频网站,先批量下载后仔细观看,岂不美哉! /2 整理 ...

  2. 手把手教你利用Python网络爬虫获取链家网的房产信息

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夜阑卧听风吹雨,铁马冰河入梦来. ...

  3. 实战|手把手教你利用Python网络爬虫获取新房数据

    一.项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以惠民之家 ...

  4. python爬虫可以爬取个人信息吗_手把手教你利用Python网络爬虫获取旅游景点信息...

    爬虫系列: 当我们出去旅游时,会看这个地方有哪些旅游景点,景点价格.开放时间.用户的评论等. 本文基于Python网络爬虫技术,以hao123旅游网为例,获取旅游景点信息. 1.项目目标 获取网站的景 ...

  5. 10分钟教你利用Python网络爬虫获取穷游攻略

    完整源码在底部 [一.项目背景] 穷游网提供原创实用的出境游旅行指南.攻略,旅行社区和问答交流平台,以及智能的旅行规划解决方案,同时提供签证.保险.机票.酒店预订.租车等在线增值服务.穷游" ...

  6. python链家网爬虫_手把手教你利用Python网络爬虫获取链家网的房产信息

    点击上方" Python爬虫与数据挖掘 ",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夜阑卧听风吹雨,铁马冰河入梦来 ...

  7. 想学爬虫的同学看过来,手把手教你利用Python网络爬虫获取APP推广信息

    一.前言 CPA之家app推广平台是国内很大的推广平台.该网址的数据信息高达数万条,爬取该网址的信息进行数据的分析. 二.项目目的 实现将获取到的QQ,导入excel模板,并生成独立的excel文档. ...

  8. Python网络爬虫之抓取订餐信息

    本文以大众点评网为例,获取页面的餐馆信息,以达到练习使用python的目的. 1.抓取大众点评网中关村附近的餐馆有哪些 import urllib.request import redef fetch ...

  9. Python网络爬虫:抓取书籍排行榜 并生成HTML网页

    Hello,大家好,我是wangzirui32,我们来学习如何抓取书籍排行榜,并生成HTML网页,开始学习吧! 文章目录 1. 分析HTML 2. 爬虫程序 3. 生成HTML网页 3.1 rende ...

最新文章

  1. android 创建资源别名,android – 将具有相同名称的布局资源别名化为不同的屏幕限定符...
  2. 经典算法学习——直接选择排序
  3. 不填写内容用哪个斜杠代替_越来越多人衣柜不装移门,今后都流行用这种代替,好看又不占地!...
  4. Springboot+Mybatis+Durid
  5. 第十六届全国大学生智能车竞赛赛道审核 - 东北赛区第三批赛道审核
  6. argparse subparsers()
  7. mysql的acid_什么是数据库ACID?
  8. android sdk引入 微信分享_微信分享sdk接入总结
  9. python3命令需要使用命令行开发者工具_关于Python3的import问题(pycharm可以运行命令行import错误)...
  10. Cow Bowling POJ - 3176(基础的动态规划算法)
  11. Ios: 如何保護iOS束文件屬性列表,圖像,SQLite,媒體文件
  12. 源码级别的广播与监听实现
  13. ftp服务器复制粘贴文件夹,ftp服务器复制粘贴文件夹
  14. 数据结构基础(7) --循环队列的设计与实现
  15. redis linux 删除数据结构,Redis集合数据结构和常用命令
  16. 怎样编写和执行Js文件
  17. C接口与实现---之一
  18. js 图片加载时 按比例设置图片宽高_JS自动等比例缩放图片,判断网页与图片加载完成。...
  19. 人工智能AI-模型训练思路
  20. 缓存穿透、击穿、雪崩什么的分不清楚?看了这篇文章后,我明白了

热门文章

  1. 连续系统PID及其离散化 位置式PID以及增量式PID
  2. 轨迹规划当中用到的多项式插值和样条曲线
  3. 广东哪所大学计算机专业好,准备考研,广东哪所大学的计算机专业最好?除了985,这所大学性价比很高...
  4. be2014备份oracle,veritas be 对oracle10g 备份异机恢复测试
  5. 自定义轮播图以及bug优化
  6. Luogu 3267 [JLOI2016/SHOI2016]侦察守卫
  7. js与jquery操作
  8. hibernate之一对一
  9. 精通android学习笔记(一)---广播
  10. sqlserver 2008阻止保存要求重新创建表的更改