ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python爬取虎牙视频排行榜上的数码视频

2021-11-19 20:06:40  阅读:106  来源: 互联网

标签:视频 name python 爬取 查找 print import id


 网站:数码视频大全_数码视频中心_虎牙视频

总的源代码:

import os.path
import re
import time

import requests
import json
import pprint  #把字典类型的数据按照源代码类型的形式输出来,更容易观察
#建立下载虎牙视频的地址:dir_name
dir_name = '数码——虎牙视频'
if not os.path.exists(dir_name):
    os.mkdir(dir_name)
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

def find_save(id):
    #先找视频播放地址,利用.mp4到前面/的一堆东西来查找,单个视频的总的播放地址
    #https://videobd-platform.cdn.huya.com/1048585/5668003/31077907/d68919f9eb244c073904380017b185ac.mp4?vid=604111737
    time.sleep(3)  #好像有一个视频有一点大,然后后面就断开连接了,这里把访问时间改变一下
    #寻找视频播放地址的总链接,改变videoId来改变视频
    baseurl = f'https://liveapi.huya.com/moment/getMomentContent?videoId={id}'
    #对视频的播放地址来查找视频详细的可以下载的网址
    request = requests.get(url=baseurl,headers=head)
    response = request.json()  #查找的JQ类型的,然后就改变一下
    # pprint.pprint(response)
    title = response['data']['moment']['title']  ##字典类型来用键查找值
    vedio_link = response['data']['moment']['videoInfo']['definitions'][0]['url']  ##字典类型来用键查找值
    # print(title)
    # print(vedio_link) #判断是不是查找到了想要的标题以及链接
    #保存视频(利用获得的详细的可以下载的视频来进行下载)
    file_name = title
    requ = requests.get(url=vedio_link,headers=head)
    with open(dir_name + '/' + file_name + '.mp4','wb') as f:  #一定要对视频加上后缀名(不然不可以播放)
        f.write(requ.content)
        print(file_name,'下载完成')
    requ.close()
    request.close() #对打开的网页进行关闭,防止被拉黑
#上面是对单个视频进行下载
#下面我们利用链接不同的id来对一个页面的视频进行下载
def find_id():
    #先利用查找视频的详细链接来搜索然后找到所有视频的总页面的来凝结
    all_url = 'https://v.huya.com/g/all?set_id=41'
    request = requests.get(url=all_url,headers=head)
    response = request.text
    # print(response)
    idss = re.findall(r' <script> window.HNF_GLOBAL_INIT = (.*?) </script>',response)[0]  #利用正则表达式来来找到存有所有的id的总的字符串
    #利用json来让字符串强制转换为字典类型
    idss = json.loads(idss)
    # pprint.pprint(idss)
    #这里注意,前面是字典,但是字典里面到每个视频的信息又一次成了列表类型
    ids = idss['videoData']['videoDataList']['value']
    print(ids)
    #这里利用列表,查找每一个id,因为有个保存的函数,所以把这个搜寻的小程序也写成函数,然后把各个id放到列表当中,然后再单个链接去下载
    id = [i['vid']for i in ids]
    print(id)  #这里的所有的id都放在了一个列表当中
    # for i in ids:
    #     id = i['vid']  #遍历列表,每个元素(也是每个视频的信息)又是字典
    #     print(id)  #这里的id是一个一个的,需要添加步骤放到一个列表当中
    request.close()
    return id

id = find_id()
for i in id:
    find_save(i)

1.先找单个视频的网页中的包

      (1)  1)右键点击检查,然后

         2)复制/后面,.mp4前面的内容

 3)将复制的内容在当前页面搜索获取每个视频页面的网址代码

 

 

再多打开几个网址同做这样的事会发现我们获得的单个视频播放的网址只有id后面不同

(2).利用单个视频中的信息来找所有视频的videoid,只有这里不同,并且把callback和uid删去也可以打开同样的网页

代码:

import os.path
import re
import time

import requests
import json
import pprint  #把字典类型的数据按照源代码类型的形式输出来,更容易观察
#建立下载虎牙视频的地址:dir_name
dir_name = '数码——虎牙视频'
if not os.path.exists(dir_name):
    os.mkdir(dir_name)
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

def find_save(id):
    #先找视频播放地址,利用.mp4到前面/的一堆东西来查找,单个视频的总的播放地址
    #https://videobd-platform.cdn.huya.com/1048585/5668003/31077907/d68919f9eb244c073904380017b185ac.mp4?vid=604111737
    time.sleep(3)  #好像有一个视频有一点大,然后后面就断开连接了,这里把访问时间改变一下
    #寻找视频播放地址的总链接,改变videoId来改变视频
    baseurl = f'https://liveapi.huya.com/moment/getMomentContent?videoId={id}'
    #对视频的播放地址来查找视频详细的可以下载的网址
    request = requests.get(url=baseurl,headers=head)
    response = request.json()  #查找的JQ类型的,然后就改变一下
    # pprint.pprint(response)
    title = response['data']['moment']['title']  ##字典类型来用键查找值
    vedio_link = response['data']['moment']['videoInfo']['definitions'][0]['url']  ##字典类型来用键查找值
    # print(title)
    # print(vedio_link) #判断是不是查找到了想要的标题以及链接
    #保存视频(利用获得的详细的可以下载的视频来进行下载)
    file_name = title
    requ = requests.get(url=vedio_link,headers=head)
    with open(dir_name + '/' + file_name + '.mp4','wb') as f:  #一定要对视频加上后缀名(不然不可以播放)
        f.write(requ.content)
        print(file_name,'下载完成')
    requ.close()
    request.close() #对打开的网页进行关闭,防止被拉黑
#上面是对单个视频进行下载

2.查找所有视频id

        1)利用上面单个视频的videoid,在整个页面的检查中查找

这里上面获取到headers的url是整个页面的网址,和地址栏上面的网址有一些不同

         2)查找id的位置

 这里利用两处查找快捷键,分别都在图里的位置,查找内容是videoid

代码:

import os.path
import re
import time

import requests
import json
import pprint  #把字典类型的数据按照源代码类型的形式输出来,更容易观察


#下面我们利用链接不同的id来对一个页面的视频进行下载
def find_id():
    #先利用查找视频的详细链接来搜索然后找到所有视频的总页面的来凝结
    all_url = 'https://v.huya.com/g/all?set_id=41'
    request = requests.get(url=all_url,headers=head)
    response = request.text
    # print(response)
    idss = re.findall(r' <script> window.HNF_GLOBAL_INIT = (.*?) </script>',response)[0]  #利用正则表达式来来找到存有所有的id的总的字符串
    #利用json来让字符串强制转换为字典类型
    idss = json.loads(idss)
    # pprint.pprint(idss)
    #这里注意,前面是字典,但是字典里面到每个视频的信息又一次成了列表类型
    ids = idss['videoData']['videoDataList']['value']
    print(ids)
    #这里利用列表,查找每一个id,因为有个保存的函数,所以把这个搜寻的小程序也写成函数,然后把各个id放到列表当中,然后再单个链接去下载
    id = [i['vid']for i in ids]
    print(id)  #这里的所有的id都放在了一个列表当中
    # for i in ids:
    #     id = i['vid']  #遍历列表,每个元素(也是每个视频的信息)又是字典
    #     print(id)  #这里的id是一个一个的,需要添加步骤放到一个列表当中
    request.close()
    return id

3.将这两步联合起来,可以实现对整个页面的视频的保存

代码:

import os.path
import re
import time

import requests
import json
import pprint  #把字典类型的数据按照源代码类型的形式输出来,更容易观察
#建立下载虎牙视频的地址:dir_name
dir_name = '数码——虎牙视频'
if not os.path.exists(dir_name):
    os.mkdir(dir_name)
head = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

def find_save(id):
    #先找视频播放地址,利用.mp4到前面/的一堆东西来查找,单个视频的总的播放地址
    #https://videobd-platform.cdn.huya.com/1048585/5668003/31077907/d68919f9eb244c073904380017b185ac.mp4?vid=604111737
    time.sleep(3)  #好像有一个视频有一点大,然后后面就断开连接了,这里把访问时间改变一下
    #寻找视频播放地址的总链接,改变videoId来改变视频
    baseurl = f'https://liveapi.huya.com/moment/getMomentContent?videoId={id}'
    #对视频的播放地址来查找视频详细的可以下载的网址
    request = requests.get(url=baseurl,headers=head)
    response = request.json()  #查找的JQ类型的,然后就改变一下
    # pprint.pprint(response)
    title = response['data']['moment']['title']  ##字典类型来用键查找值
    vedio_link = response['data']['moment']['videoInfo']['definitions'][0]['url']  ##字典类型来用键查找值
    # print(title)
    # print(vedio_link) #判断是不是查找到了想要的标题以及链接
    #保存视频(利用获得的详细的可以下载的视频来进行下载)
    file_name = title
    requ = requests.get(url=vedio_link,headers=head)
    with open(dir_name + '/' + file_name + '.mp4','wb') as f:  #一定要对视频加上后缀名(不然不可以播放)
        f.write(requ.content)
        print(file_name,'下载完成')
    requ.close()
    request.close() #对打开的网页进行关闭,防止被拉黑
#上面是对单个视频进行下载
#下面我们利用链接不同的id来对一个页面的视频进行下载
def find_id():
    #先利用查找视频的详细链接来搜索然后找到所有视频的总页面的来凝结
    all_url = 'https://v.huya.com/g/all?set_id=41'
    request = requests.get(url=all_url,headers=head)
    response = request.text
    # print(response)
    idss = re.findall(r' <script> window.HNF_GLOBAL_INIT = (.*?) </script>',response)[0]  #利用正则表达式来来找到存有所有的id的总的字符串
    #利用json来让字符串强制转换为字典类型
    idss = json.loads(idss)
    # pprint.pprint(idss)
    #这里注意,前面是字典,但是字典里面到每个视频的信息又一次成了列表类型
    ids = idss['videoData']['videoDataList']['value']
    print(ids)
    #这里利用列表,查找每一个id,因为有个保存的函数,所以把这个搜寻的小程序也写成函数,然后把各个id放到列表当中,然后再单个链接去下载
    id = [i['vid']for i in ids]
    print(id)  #这里的所有的id都放在了一个列表当中
    # for i in ids:
    #     id = i['vid']  #遍历列表,每个元素(也是每个视频的信息)又是字典
    #     print(id)  #这里的id是一个一个的,需要添加步骤放到一个列表当中
    request.close()
    return id

id = find_id()
for i in id:
    find_save(i)

标签:视频,name,python,爬取,查找,print,import,id
来源: https://blog.csdn.net/weixin_57431906/article/details/121428798

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有