60 行代码,10000 个虎牙小姐姐视频来袭!

Posted 程序员启航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了60 行代码,10000 个虎牙小姐姐视频来袭!相关的知识,希望对你有一定的参考价值。

大家好,我是启航,今天用 Python 下载虎牙的小姐姐视频,大伙一起来看看吧。

代码获取方式

QQ群:857113825   通关密语:虎牙视频

获取播放列表

打开虎牙上星秀/颜值的视频地址 https://v.huya.com/g/all?set_id=31&order=hot&page=1,我们可以看到看到一共 500 页,每页有 20 条视频,总共 10000 条小姐姐的视频。

Image

通过观察 F12 控制台可知每个视频播放页超链接都在 li 标签下,获取到 li 标签就可以取到视频地址了。然后将视频名字和地址用 | 存入 txt 文本或者 list 变量中。

Image

import requests
from bs4 import BeautifulSoup
import time
import random
import json
import re

url_file_name = 'D:\\\\url.txt'

def get_list():
    for p in range(500):
        
        html = requests.get('https://v.huya.com/g/all?set_id=31&order=hot&page={}'.format(p+1));
        soup = BeautifulSoup(html.text, 'html.parser')
        ul = soup.find('ul', class_='vhy-video-list w215 clearfix')
        lis = ul.find_all('li')
        for li in lis:
            a = li.find('a', class_ = 'video-wrap statpid');
            href = a.get('href')
            title = a.get('title')
            # 去掉文件名中的特殊字符
            title = validate_title(title)
            with open(url_file_name,'a',encoding = 'utf-8') as f:
                f.write(title + '|' + href + '\\n')
        print("已经抓取了 {} 页".format(p + 1))

        time.sleep(random.randint(1, 9)/10)


def validate_title(title):
    rstr = r"[\\/\\\\\\:\\*\\?\\"\\<\\>\\|]"
    new_title = re.sub(rstr, "", title)
    return new_title

示例结果:

Image

获取视频地址

下载视频只得到视频的播放页地址是远远不够的,还需要得到每个视频的真实播放地址。通过如下图观察 Network 面板可以发现视频播放地址在 https://v-api-player-ssl.huya.com/?r=vhuyaplay%2Fvideo&vid=510233425&format=mp4%2Cm3u8 的返回值中。

json 格式化后结果:

Image

def get_video_url():
    urls_file = open(url_file_name, 'r', encoding='utf-8')
    url_lines = urls_file.readlines()
    urls_file.close()
    
    video_urls = []
    for line in url_lines:
        # 视频名字 | 地址
        infos = line.split('|')
        video_id = infos[1].replace('.html\\n', '').replace('/play/', '');
        data = requests.get('https://v-api-player-ssl.huya.com/?r=vhuyaplay%2Fvideo&vid={}&format=mp4%2Cm3u8'.format(video_id))
        data = json.loads(data.text)
        
        url = data['result']['items'][0]['transcode']['urls'][0]
        video_urls.append({'title': infos[0], 'url':url})

    return video_urls

最后调用写文件函数保存视频。

def save_video(video_urls):
    for item in video_urls:
        title = item.get('title')
        print('正在下载:{}'.format(title))
        html = requests.get(item.get('url'))
        data = html.content
        with open('D:\\\\{}.mp4'.format(title), 'wb') as f:
            f.write(data)
    print('全部下载完成了')

示例结果:

Image

总结

这个 Python 脚本比较简单,比 B 站的视频下载简单多了,有兴趣的小伙伴可以试着练练手。喜欢二次元小姐姐的小伙伴可以将星秀频道 url 换成二次元频道 url。

  1.  

在这里插入图片描述

 文章到这里就结束了,感谢你的观看

说实在的,每次在后台看到一些读者的回应都觉得很欣慰,我想把我收藏的一些编程干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤    Python所有知识点汇总(可以弄清楚Python的所有方向和技术)

*如果你用得到的话可以直接拿走,在我的QQ技术交流群里,可以自助拿走,群号是857113825。*
在这里插入图片描述

以上是关于60 行代码,10000 个虎牙小姐姐视频来袭!的主要内容,如果未能解决你的问题,请参考以下文章

太刺激了!用python30行代码抓取虎牙上万个小姐姐跳舞视频,不说了,鼻血上来了···

20行Python代码!把B站直播间的小姐姐占为己有

20行Python代码!把B站直播间的小姐姐占为己有

20行Python代码!把B站直播间的小姐姐占为己有

想一次拥有全部steam游戏角色?专属游戏制作福利来袭!

[视频教学,讲解]手把手教你爬取清纯小姐姐私房照