Python爬虫:给我一个链接,虎牙视频随便下载

1. 爬取的原理

请添加图片描述
我们来到虎牙视频主界面,链接为:虎牙视频主界面
然后随便点击一下某个视频的发布者,来到这个发布者的主界面,点击到视频,如下:
请添加图片描述
我们可以看到这个界面下有许多视频可以观看,那么怎样下载呢?我们随便点击其中的一个视频进入,按电脑键盘的F12来到开发者模式,然后点击network->js->找到相应的网址->视频下载链接请添加图片描述
我们可以找到相应的视频下载链接。
那么怎样发起请求呢?这是一个get请求,网址为:https://v-api-player-ssl.huya.com,请求参数如下:
请添加图片描述
那么这些请求参数具体代表什么意思呢?

2. 具体怎样实现

小编经过分析发现,

  • 第一个参数callback的值应该是:jQuery+一段随机字段+_+时间戳,既然有一段随机字段,那么这个不改直接用应该也是可以的;
  • 第二个参数r的值应该是固定的,这个直接用就行;
  • 第三个参数vid,也就是的视频的id,其实这个参数就是这个视频在服务器上的数据库中的id(小编猜测的,毕竟小编最近也在做相应的项目,也会使用到相应的id编号),这个参数在发布者视频下可以通过re正则表达式获取;
  • 第四个参数是format,应该是类型,这个应该也是固定的,直接copy即可;
  • 第五个参数也就是时间戳,直接copy或者写都行。
3. 代码和运行结果

请添加图片描述

代码如下:

import requests
from lxml import etree
from crawlers.userAgent import useragent
import re
import json
import time


class video(object):

    def __init__(self,url):
        # url 为输入的链接
        self.url = url
        self.page = 0
        self.u = useragent()

    def getPages(self):
        # 获取当前链接界面的总页数
        headers = {'user-agent':self.u.getUserAgent()}
        rsp = requests.get(url=self.url,headers=headers)
        html = etree.HTML(rsp.text)
        aList = html.xpath('//div[@class="user-paginator"]/ul/li/a')

        print('视频总页数为:',aList[-2].text)

        self.page = int(input("请输入想下载的视频页数:"))

    def downloadVideo(self):
        # 下载视频的方法,并没有下载视频,只是获取视频的下载链接

        for i in range(1,self.page+1):
            if i == 1:
                url2 = '{}?sort=news'.format(self.url)
            else:
                url2 = '{}?sort=news&p={}'.format(self.url,i)
            headers = {'user-agent':self.u.getUserAgent()}
            rsp = requests.get(url=url2,headers=headers)
            html2 = etree.HTML(rsp.text)
            hrefs = html2.xpath('//div[@class="content-list"]/ul/li/a')
            for j in range(len(hrefs)):
                href = hrefs[j].xpath('./@href')[0]
                title = hrefs[j].xpath('./@title')[0]
                print('视频名称为:',title)
                vid = re.findall("/play/(\d*).html",href)[0]   # 获取vid

                self.getDownloadHref(vid=vid)
                print('#'*50)

            time.sleep(2)

    def getDownloadHref(self,vid):

        url3 = 'https://v-api-player-ssl.huya.com'
        params={'callback': 'jQuery1124017458848743440036_1632126349635',
                'r': 'vhuyaplay/video',
                'vid': vid,
                'format': 'mp4,m3u8',
                '_': '1632126349643'}
        rsp = requests.get(url=url3,headers={'user-agent':self.u.getUserAgent()},params=params)
        infos = rsp.text
        lindex = infos.find('(')
        rindex = infos.find(')')
        dict2 = json.loads(infos[lindex+1:rindex])
        list2 = dict2['result']['items']
        v_list2=['高清','原画','流畅']
        for i in range(len(list2)):
            print(v_list2[i],list2[i]['transcode']['urls'][0])



if __name__ == '__main__':
    url = input("请输入视频链接:")
    v = video(url)
    v.getPages()
    v.downloadVideo()

其中crawlers模块如果读者一直阅读小编的博客,就知道是来干什么的,如果读者是第一次来阅读小编的博客,可以去看看小编的这篇博客,博客链接为:Python爬虫:制作一个属于自己的IP代理模块
另外,小编并没有实现下载视频的功能,只是把视频的下载链接给提取出来了哈!爬虫需要遵守相应的法律法规,不能对服务器造成很大的负担,还有,就是,有的视频时间比较长,代码实现下载效果还没有直接copy下载链接到网页端下载那么高效,当然,有兴趣的读者可以自己去试试哈!

看看运行效果吧!

运用Python爬虫下载虎牙视频

对了,需要注意输入的视频链接喔!

### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持不懈的大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值