最近发现一些网站,可以解析各大视频网站的vip。仔细想了想,这也算是爬虫呀,爬的是视频数据。

首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” 。

分析页面

我用的是chrome浏览器,F12进入查看。选择NetWork的Doc,发现主体部分的数据是从这个网站获取的。

在地址栏输入这个链接,跳转到了视频来源的播放页面。

当然,在这个页面就可以直接观看视频了,但是我们要把视频下载下来。

寻找视频文件

仍然是之前那个页面,在Other中,我们发现了一些奇怪的东西。

查一下,m3u8是个啥东西。

m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。

这下就清楚了,这就是我们要找的东西。

点击Response,查看这个.m3u8的文件。观察发现,.ts后缀的文件地址是有规律的。我们只需要下载所有的.ts后缀文件,然后把它们整合成一个文件即可。

合并.ts文件

命令行:“copy /b  F:\f\*.ts  E:\f\new.ts”。

执行该命令后,F:\f目录下的全部TS文件就被合并成一个new.ts文件了(你原来的那堆文件仍然存在)。

这里使用copy命令的文件合并功能进行ts文件的合并,copy后面的 /b  参数表示把文件按二进制格式来合并,如果不加这个参数,则会把目标当成文本文件来合并,并在文件内添加不必要的标记,这会导致播放出错,所以必须加 /b 参数。

编写脚本,下载.ts文件

from urllib importrequestimporturllibfrom time importsleepimportsocketclassCatchVideo(object):def __init__(self):

self.headers= "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"self.url= ""

defset_url(self, i):if i < 1000:

self.url= "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412%03d.ts" %ielse:

self.url= "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412%04d.ts" %i#获取并下载ts文件

defdl_ts(self, i):

rq=request.Request(self.url)

rq.add_header('User-Agent', self.headers)

response=request.urlopen(rq)

resread=response.read()

with open(str(i)+".ts", "wb") as f:

f.write(resread)

response.close()#关闭urlopen方法,防止被ban

defstart_work(self):for i in range(0, 1563+1):

self.set_url(i)try:

self.dl_ts(i)print(str(i) + ".ts success")

sleep(1)excepturllib.error.URLError as e:print(e.reason)break

exceptsocket.timeout as e2:print(e2.reason)

self.dl_ts(i)if __name__ == '__main__':

catch_video=CatchVideo()

socket.setdefaulttimeout(20)

catch_video.start_work()

运行过程中,出现了两次报错,分别是:

urllib.error.URLError :[WinError 10054]  远程主机强迫关闭了一个现有的连接

socket.timeout     read读取超时

解决办法:

1.增加response.close,关闭urlopen方法。

2.增加time.sleep,有一秒缓冲时间

3.设置socket.setdefaulttimeout,给socket预留缓冲时间

还存在问题

实际运行过程中,脚本执行效率略低。之后会加入多线程,继续改进,增加运行效率。

参考博客:

更新代码,加入多进程

修改了start_work方法和主进程:

defstart_work(self, i):

self.set_url(i)try:

self.dl_ts(i)print(str(i) + ".ts success")

sleep(1)excepturllib.error.URLError as e:print(e.reason)

self.dl_ts(i)exceptsocket.timeout as e2:print(e2.reason)

self.dl_ts(i)if __name__ == '__main__':

catch_video=CatchVideo()

socket.setdefaulttimeout(20)#设置socket层超时时间20秒

I =0while I < 1563+1:#5个进程并发运行

p_l = [Process(target=catch_video.start_work, args=(i,)) for i in range(I, I+5)]for p inp_l:

p.start()for p inp_l:

p.join()

I= I + 5

这里设置了5个进程同时运行,太多远程主机会拒绝请求。

OK,这样就能很快下载了。隔了几天终于想起来还有个电影没看,哈哈 ^_^

python合并ts视频_python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频相关推荐

  1. python爬虫小说下载到txt文档_python 爬取网络小说 清洗 并下载至txt文件

    什么是爬虫 网络爬虫,也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. 网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引.网络爬虫可以 ...

  2. python 爬取搞笑视频_Python爬取知乎上搞笑视频,一顿爆笑送给大家

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Huangwei AI 来源:Python与机器学习之路 PS:如有需 ...

  3. python足球联赛赛程_python爬取足球比赛赛程笔记

    目标:爬取某网站比赛赛程,动态网页,则需找到对应ajax请求(具体可参考:https://blog.csdn.net/you_are_my_dream/article/details/53399949 ...

  4. python自动爬取更新电影网站_python爬取电影网站信息

    一.爬取前提 1)本地安装了mysql数据库 5.6版本 2)安装了Python 2.7 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑 1)进入电影网列表页, 针对列表的ht ...

  5. python制作手机壁纸_Python爬取手机壁纸图片

    使用Python爬取图片. 1 说明 本文通过爬虫程序的编写,实现了一个简单易懂的爬虫程序,方便初学者理解,主要程序分为网页获取函数,以及保存下载函数,这就是所有爬虫程序的基本思想.(本文不涉及反爬, ...

  6. python lol脚本_python 爬取英雄联盟皮肤并下载的示例

    爬取结果: 爬取代码 import os import json import requests from tqdm import tqdm def lol_spider(): # 存放英雄信息 he ...

  7. python爬取小说网站_Python爬取小说网站下载小说

    1前言 这个小程序是用来爬取小说网站的小说的,一般的盗版小说网站都是很好爬取的 因为这种网站基本没有反爬虫机制的,所以可以直接爬取 该小程序以该网站http://www.126shu.com/15/下 ...

  8. python最新官网图片_python爬取福利网站图片完整代码

    存起来 自己学习... import requests,bs4,re,os,threading class MeiNvTu: def __init__(self): self.url_main='ht ...

  9. python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表

    全栈工程师开发手册 (作者:栾鹏) python教程全解 其中使用到了urllib.BeautifulSoup爬虫和结巴中文分词的相关知识. 调试环境python3.6 # 根据连接爬取中文网站,获取 ...

  10. python爬取web漫画网站_[Python爬虫学习]利用selenuim爬取漫画网站

    注意事项 版本 Python版本为 Python-3.8.3 系统为 Windows10 浏览器为 Firefox-77.0 前置 \(selenium\) \(BeautifulSoup\) \(r ...

最新文章

  1. java的byte php_java_浅谈java的byte数组的不同写法,(由于篇幅原因阐述的不够详 - phpStudy...
  2. 3 个问题:MIT专家论述关于阻碍AutoML发展的障碍
  3. 为什么那么多人工作都不开心?
  4. linux 杀死t状态进程,Linux查杀stopped进程
  5. 金山吹响讨伐灰鸽子的号角
  6. LeetCode 983. 最低票价(动态规划)
  7. 大湾区网络安全大会开幕在即,五个看点揭秘
  8. zabbix自动发现主机并加入组绑定模板
  9. 深度学习的实用层面 —— 1.9 正则化输入
  10. java 执行多个查询语句_用java在单个语句中执行的多个查询
  11. 面试出现频率超高的一道算法题
  12. css 百分比继承关系的探讨
  13. linux uuid挂载磁盘_Linux磁盘设备磁盘设备的UUID标识代码(sda,sdb,sdc…)变化的解决办法...
  14. 独立游戏开发日志:2021年2月12日 改进版反弹跳
  15. 微信网页授权本地调试
  16. 数字锁相环matlab仿真,锁相环仿真_MATLAB仿真程序代码_二阶锁相环仿真过程
  17. python使用pypandoc将html转换成word文档
  18. win10怎么不能运行c语言,Win10系统打开游戏出现程序无法正常启动0xc0000142解决方法...
  19. 第三方阿里云盘小白羊版v2发布!提前尝鲜!!!!
  20. ubuntu使用fdisk分区

热门文章

  1. 如何在CentOS 5/6上安装EPEL源
  2. C/C++常见库函数实现(memcpy、memset、 strcpy)
  3. html传递json中文乱码,解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码...
  4. 【实操】深度学习网络万万千,到底怎么把我的数据放进去?
  5. 燃烧学往年精选真题解析2018-01-01
  6. 自动平衡男女比例的随机分组软件B2G使用教程,献给组织
  7. OpenGL编程指南7:视图-
  8. 串口通信模块3:串口通信编程基础(读写、关闭)
  9. 一个基于xml的超级orm框架-世界是由懒人创造的。
  10. 系统地学学喝酒的技巧