还是老生常谈的操作

import requests
import os
from bs4 import BeautifulSoup
from urllib.parse import urljoin html = requests.get('http://www.332dy.com/pu/37192-0-0.html')
soup = BeautifulSoup(html.text,'lxml')
lists = soup.select('.stui-content__playlist.sort-list.column8.clearfix li a')
for list in lists:
print(list['href'])

返回

/pu/37192-0-0.html
/pu/37192-0-1.html
/pu/37192-0-2.html
/pu/37192-0-3.html
/pu/37192-0-4.html
/pu/37192-0-5.html
/pu/37192-1-0.html
/pu/37192-1-1.html
/pu/37192-1-2.html
/pu/37192-1-3.html
/pu/37192-1-4.html
/pu/37192-1-5.html

拼接一下

import requests
import os
from bs4 import BeautifulSoup
from urllib.parse import urljoin base_url = 'http://www.332dy.com/'
html = requests.get('http://www.332dy.com/pu/37192-0-0.html')
soup = BeautifulSoup(html.text,'lxml')
lists = soup.select('.stui-content__playlist.sort-list.column8.clearfix li a')
for list in lists:
innerurl = urljoin(base_url,list['href'])
print(innerurl)

然后我们就要下载这个视频,来抓下包

可以看到是个ts流,这个就是分段下载,一般ts流都有个m3u8

我们看头部可以知道有个sign

Request URL: https://shuixian.nihaozuida.com/20200313/1391_06cf517b/index.m3u8?sign=01799e5e52bc047a26880b8c15e42313

来全局搜索一下sign

可以看到这个sign是从一个script脚本里面取的,把鼠标移到上面可以看到share我们去源代码全局搜索下share

访问https://shuixian.nihaozuida.com/share/7f53f8c6c730af6aeb52e66eb74d8507可以看到是视频这个应该是

3u8文件,我们就取出var now=使用正则表达式因为script一般不在我们语法里面

re_m3u8 = re.compile('now="(.*?)"',re.I|re.S)
html2 = requests.get(innerurl)
m3u8Result = re_m3u8.findall(html2.text)[0]
print(m3u8Result)

成功获取到了,但是返回的为列表是4集我们获取第一个,所以加上[0]

我们访问一下抓包,可以看到访问了这个文件然后main里面我们访问就是下载的m3u8文件

同样正则获取一下里面的值

re_main = re.compile('main = "(.*?)"',re.I|re.S)
html3 = requests.get(m3u8Result)
mainResult = re_main.findall(html3.text)[0]
print(mainResult)

同样取出要拼接

baseurl = 'https://shuixian.nihaozuida.com/'
resultUrl = urljoin(baseurl,mainResult)
print(resultUrl)

然后我们把这个m3u8文件保存一下

 if not os.path.exists('影视'):
os.mkdir('影视')
with open('影视/m3u81.txt','w',encoding='utf-8')as f:
f.write(requests.get(resultUrl).text)
print('m3u8存储完毕')

然后再读取出来

    with open('影视/m3u81.txt', 'r', encoding='utf-8')as f:
lines = f.readlines()
for line in lines:
if line.startswith('#'):
continue
print(line)

输出

1024k/hls/index.m3u8

再拼接起来

现在获取到的就是里面很多ts流,同样保存起来

    with open('影视/m3u82.txt', 'w', encoding='utf-8')as f:
f.write(requests.get(url).text)
print('m3u8存储完毕') with open('影视/m3u82.txt', 'r', encoding='utf-8')as f:
lines = f.readlines()
for line in lines:
if line.startswith('#'):
continue
print(line)

输出

但是现在还不能用这个ts我们看一下他本地怎么发包的

Request URL: https://shuixian.nihaozuida.com/20200313/1391_06cf517b/1024k/hls/5b5cebabeb8000002.ts

base = 'https://shuixian.nihaozuida.com/20200313/1391_06cf517b/1024k/hls/'
url = urljoin(base,line.strip().replace('\n',''))
print(url)

然后就是下载这些ts流,最终代码为

import requests
import os
import re
from bs4 import BeautifulSoup
from urllib.parse import urljoin re_m3u8 = re.compile('now="(.*?)"',re.I|re.S)
re_main = re.compile('main = "(.*?)"',re.I|re.S) html = requests.get('http://www.332dy.com/dili/37192.html')
soup = BeautifulSoup(html.text,'lxml')
lis = soup.select('ul.stui-content__playlist.sort-list.column8.clearfix li a')
base = 'http://www.332dy.com/'
for li in lis:
innerUrl = urljoin(base,li['href'])
# print(innerUrl) html2 = requests.get(innerUrl)
m3u8Result = re_m3u8.findall(html2.text)
# print(m3u8Result)
if m3u8Result==[]:
base = 'http://www.332dy.com'
innerUrl = urljoin(base, li['href'])
html2 = requests.get(innerUrl)
m3u8Result = re_m3u8.findall(html2.text) html3 = requests.get(m3u8Result[0])
mainResult = re_main.findall(html3.text)[0]
baseurl = 'https://shuixian.nihaozuida.com/'
resultUrl = urljoin(baseurl,mainResult)
if not os.path.exists('影视'):
os.mkdir('影视')
with open('影视/m3u81.txt','w',encoding='utf-8')as f:
f.write(requests.get(resultUrl).text)
print('m3u8存储完毕') with open('影视/m3u81.txt', 'r', encoding='utf-8')as f:
lines = f.readlines()
for line in lines:
if line.startswith('#'):
continue
# print(line)
#https://shuixian.nihaozuida.com/20200313/1391_06cf517b/1024k/hls/index.m3u8
#1024k/hls/index.m3u8
basem3u8 = 'https://shuixian.nihaozuida.com/20200313/1391_06cf517b/'
url = urljoin(basem3u8,line)
break with open('影视/m3u82.txt', 'w', encoding='utf-8')as f:
f.write(requests.get(url).text)
print('m3u8存储完毕') with open('影视/m3u82.txt', 'r', encoding='utf-8')as f:
lines = f.readlines()
for line in lines:
if line.startswith('#'):
continue
# print(line)
base = 'https://shuixian.nihaozuida.com/20200313/1391_06cf517b/1024k/hls/'
ts_url = urljoin(base,line.strip().replace('\n',''))
# print(url)
with open('影视/1.mp4','ab')as f:
f.write(requests.get(ts_url).content)

效果

python获取某视频网站视频的更多相关文章

  1. 使用you-get下载视频网站视频或其他

    使用you-get下载视频网站视频或其他 文/玄魂 目录 使用you-get下载视频网站视频或其他 前言 1.1 下载.安装 依赖 exe安装 pip安装 Antigen安装 Git 克隆源码 Hom ...

  2. Python获取Origin官网视频

    程序说明:最近学习origin,看到官网有入门视频(http://www.originlab.com/index.aspx?go=SUPPORT/VideoTutorials),看着挺多的,就用pyt ...

  3. 下载B站、秒拍等视频网站视频

    需要一个FVD Downloader(插件) 安装过程很简单,会浏览器安装插件的就不多说了!

  4. python爬虫:爬取网站视频

    python爬取百思不得姐网站视频:http://www.budejie.com/video/ 新建一个py文件,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  5. 转:最简单的视频网站(JavaEE+FFmpeg)

    本文记录一个最简单的视频网站系统.此前做过一些基于JavaEE中的 SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个&q ...

  6. 最简单的视频网站(JavaEE+FFmpeg)

    本文记录一个最简单的视频网站系统.此前做过一些基于JavaEE中的SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个&qu ...

  7. 最简单的基于JavaEE和FFmpeg的视频网站

    最简单的视频网站 Simplest Video Website 雷霄骅 Lei Xiaohua leixiaohua1020@126.com 中国传媒大学/数字电视技术 Communication U ...

  8. Python+Tornado+Tampermonkey 获取某讯等主流视频网站的会员视频解析播放

    近期,<哪吒之魔童降世>在各大视频软件可以看了,然而却是一贯的套路,非会员谢绝观看!!!只能从国内那些五花八门的视频网站上找着看了,或者通过之前本人说的 Chrome 的油猴插件,传送门  ...

  9. python下载各大主流视频网站电影

    You-Get 是一个命令行工具, 用来下载各大视频网站的视频, 是我目前知道的命令行下载工具中最好的一个, 之前使用过 youtube-dl, 但是 youtube-dl 吧, 下载好的视频是分段的 ...

随机推荐

  1. Netbox 开源 IPAM 管理工具搭建详细流程

    原文链接:Netbox 开源 IPAM 管理工具搭建详细流程 参考资料:https://netbox.readthedocs.io/en/stable/ PostgreSQL数据库安装 1.yum 下 ...

  2. failed to find romfile "vgabios-stdvga.bin"

    问题:failed to find romfile "vgabios-stdvga.bin" 解决: apt-get install vgabios ln -s /usr/shar ...

  3. webstorm激活码2020--定期更新

    2020年8月22日更新 一般错误关闭软件重填即可,key is invalid 错误需要恢复破解或者重装,才能使用 V8AF5QDT5R-eyJsaWNlbnNlSWQiOiJWOEFGNVFEVD ...

  4. 【转】Python进度条tqdm的使用

    有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况.这对于第三方库非常丰富的Python来说,想要实现这一功 ...

  5. Hive 常见面试题(一)

    面试题: hive 内部表和外部表的区别? hive 是如何实现分区的? Hive 有哪些方式保存元数据,各有哪些优缺点? hive中order by.distribute by.sort by和cl ...

  6. 【原创】Kuberneters-ConfigMap的实践

    一.什么是ConfigMap        ConfigMap翻译过来即为“配置字典”,在实际的生产环境中,应用程序配置经常需要且又较为复杂,参数.config文件.变量等如果直接打包到镜像中,将会降 ...

  7. Android开发之TextView中间设置横线,适用于电商项目,商品原价之类的功能。

    textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); //中间横线 textview.getPaint().setFlags(Pai ...

  8. How to avoid multiple definition of function with gcc

    LDFLAGS add -Wl,--allow-multiple-definition

  9. WebStorm下ReactNative代码提示设置

    ReactNative 代码智能提醒  (Webstrom live template) https://github.com/virtoolswebplayer/ReactNative-LiveTe ...

  10. Arbitrary-Oriented Object Detection with Circular Smooth Label(ECCV2020,旋转目标检测)

    论文链接:https://arxiv.org/abs/2003.05597 code:https://github.com/Thinklab-SJTU/CSL_RetinaNet_Tensorflow ...