• 爬某牙小姐姐视频


    爬某牙小姐姐视频,播放量最多的那种。因为数据提取很繁琐,就不bb了。直接上代码,代码里有注释。

    """
        试爬某牙的视频,养养眼
    """
    import os
    import pprint
    import re
    import requests
    
    # 视频地址:https://v.huya.com/ ->频道,星宿颜值->最多播放
    
    filePath = 'video\' # 要存储的地址
    if not os.path.exists(filePath):
        os.mkdir(filePath)
    
    # 首先请求的是视频列表页面,获取视频id
    url = 'https://v.huya.com/g/all_most_31' # 视频列表页面
    # 请求参数
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36',
    }
    
    # 请求数据
    response = requests.get(url=url, headers=headers)
    # print(response.text)
    # 用正则表达式找到视频列表id
    results = re.findall('<a href="//v.huya.com/play/(d+).html"', response.text)
    # print(results)
    # 找到了视频列表id之后,现在要确定视频播放来源,
    # 随便点开一个视频播放,找到它请求的播放地址
    # 发现为类似的:https://huya-w20.huya.com/2120/510233425/1300/e0817db60b0729879b0a5553d7474214.mp4?bitrate=1401&client=22&definition=1300&pid=1199564385429&scene=vod&vid=510233425
    # 复制.mp4前面的字符串,在开发者工具里进行查找,看它的最终源
    # 发现有类似json的数据,展开查看,发现正是需要的数据源
    # 请求json数据
    
    for vedioId in results:
        # # 构造视频列表播放请求的url
        # videoPlayurl = f'https://liveapi.huya.com/moment/getMomentContent?callback=jQuery1124037387656100533784_1635472169330&' 
        #       f'videoId={vedioId}&uid=&_=1635472169352'
        # # 请求一下上面的地址以查看数据是否准确
        # playUrlresponse = requests.get(url=videoPlayurl, headers=headers)
        # print(playUrlresponse.text) # 这里肯定是个字符串,可以用处理字符串的方式或者用re提取想要的信息
        # # 有个大神说,只需要将url里的callback那一串去掉就能打印出json数据
    
        # 上面的处理需要字符串处理,用大神说的,将callback那一串删除
        videoPlayurl = f'https://liveapi.huya.com/moment/getMomentContent?' 
              f'videoId={vedioId}&uid=&_=1635472169352'
        playUrlresponse = requests.get(url=videoPlayurl, headers=headers)
        # print(playUrlresponse.json()) # 到此就获取到了json数据
        # pprint.pprint(playUrlresponse.json())
    
        # 获取到了json数据就提取要下载的源url和视频名称
        videoOrginalUrl = playUrlresponse.json()['data']['moment']['videoInfo']['definitions'][0]['url'] # 取到url
        videoName = playUrlresponse.json()['data']['moment']['videoInfo']['videoTitle']
        print(videoName, videoOrginalUrl)
        # break # 调试的时候可以只打印一次
    
        # 取到了数据源就可以请求下载了
        requestVideoDownload = requests.get(url=videoOrginalUrl, headers=headers)
    
        with open(filePath + videoName + '.mp4', mode='wb') as f: # 以二进制方式保存数据
            f.write(requestVideoDownload.content)
            if os.path.exists(videoName + '.mp4'):
                print(videoName + '视频已经存在!')
            else:
                print(videoName + '还在下载中。。。')
    

    下载完后的结果:

     我就爬了一页,没做分页爬取,电脑太卡。分页的话加个for循环。

  • 相关阅读:
    26.列表的循环遍历
    效率比较--链表
    心之距离 再回首 光年之遥远
    效率比较--集合
    效率比较--数组
    哈希表
    栈 VS 队列
    struts1 标签引入
    web 连接池配置
    zip&ftp命令
  • 原文地址:https://www.cnblogs.com/mafu/p/15479145.html
Copyright © 2020-2023  润新知