爬虫(二)——Bilibili 视频获取
本文最后更新于162 天前,其中的信息可能已经过时,如有错误请发送邮件到lysun26@163.com

前言

首先需要声明的是,如果你不是大会员,就没法爬取到大会员才能看的视频,即只能爬你能看到的视频。(悄咪咪的说,你可以用别人的大会员账号登录一下浏览器,然后把 cookie 记下来,就可以下大会员视频了)。另外,爬取480P以上的视频,需要添加cookie。

抓包

首先,我们就去找视频对应的包。我们随便打开一个视频,按 F12,然后刷新页面,如下:

可以看到有两个名字很显眼,分别是 1298370763-1-30102 和 30280,然后我们点开,查看响应结果,发现是一堆乱码,这时我们就可以猜测这两个文件大概率就是视频所对应的包了,一般音频和视频的响应数据,查看的话就是乱码。然后去查看标头,可以看到类型为 video/mp4,就基本可以确认了。

那么这两个包具体有什么区别呢?我们可以去 python 中,写代码请求一下,看看得到的文件是什么样的。

这里推荐一个网站, https://curlconverter.com/python/ 。这个网站可以快速生成请求代码,使用方法如下:

然后将复制的结果粘贴到网站中,就可以快速生成代码了。将文件下载下来之后,可以发现视频的时间很短,这时可以猜测视频是分段存储和播放的。然后也可以发现,30102 对应的文件是只有画面,没有声音,而 30280 对应的文件是只有声音,没有画面。这时就很清晰了,30280 对应的音频文件,30102 对应的视频文件。此时文件的位置已经确定了,接下来就是对请求头的分析了。

分析

通过观察 Headers,可以发现有一个 Range,后面是"bytes=5873944-6613096",结合前面的分析,很显然,这个就代表了视频的哪一段。因此,我们可以将其改成 0 开头,然后以一个很大的数结尾,改成"0-100000000000"试一试,发现果然得到了完整的视频。好了,接下来就是对 url 进行分析了。url 如下:

https://xy58x218x65x48xy.mcdn.bilivideo.cn:4483/upgcxcode/63/07/1298370763/1298370763-1-30102.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1697274367&gen=playurlv2&os=mcdn&oi=1786350859&trid=000069aae7622d194378b008d5bdecd0a8fau&mid=383582195&platform=pc&upsig=f4d46e3c4f716b974ab7e7cbd5c734a2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=14002137&bvc=vod&nettype=0&orderid=0,3&buvid=CE3C8865-9B51-484D-D665-F55C56F0EBDB58781infoc&build=0&f=u_0_0&agrr=1&bw=127451&logo=A0002000

我们视频的网址一般是 https://www.bilibili.com/video/BV1FN4y117bR/ 。显然这两个是毫不相关的。因此,我们需要去寻找这个视频的 url 是在哪个包中。我们复制其中的 1298370763,在开发者工具中搜索。

显然,第一个的名字是 videoshot,就很不像。然后我们先去第二个,然后并没有发现视频的 url。然后我们就去第三个,发现就在这里面,且这个正好是请求网址返回的 HTML 文件。通过查看 Headers 也不难看出来,请求的 url 正好是浏览器上方的 url。

这时我们直接去 Element 中寻找,如下:

显然,视频的 url 就在 script 标签下,并且可以发现,playinfo 后面的是一个 json 数据,而视频的 url 就在这些 json 数据中。那么,我们就可以从该 HTML 中提取出这些内容了。

提取

xpath

首先,我们采用 XPath 方法进行提取,我们直接复制 XPath,得到 /html/head/script[4]。然后利用 text 方法,即 /html/head/script[4]/text() 得到其中的内容。然后我们将前面的 window.__playinfo__= 去掉,直接采用 python 的字符串的方法,比如 res = res[20:] 即可。然后将其转换为字典数据,就可以取出其中的视频 url 了。

正则表达式

直接去网站测试一下。所以就可以用 window.__playinfo__=(.*)<\/script><script>,然后就 ok 了。

结果分析

通过对提取出来的结果进行分析,可以发现不同的视频质量,对应一个 id,并且同一个视频质量,有三个链接,具体有什么区别我就不知道了。视频是在 video 下,音频是在 audio 下。

视频与音频合并

这个可以借助 ffmpeg 工具,很简单。具体使用方法可以去查找,比如:

https://blog.csdn.net/weixin_43835542/article/details/109493050

最后,如果有代码问题的话,可以私聊我。这篇文章主要就是分享了找视频链接的过程。

有问题可以留言哦~ 觉得有帮助也可以投喂一下博主,感谢~
文章链接:https://www.corrain.top/scrapy-2/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章地址及作者

评论

  1. d
    6 月前
    2023-10-29 16:49:02

    这样爬到的视频是480的

    • Corrain
      d
      6 月前
      2023-10-29 16:58:21

      480p以上的需要cookie,这篇文章我找个时间修改一下

  2. 6 月前
    2023-10-25 17:52:36

    之前看了B站的简单爬虫教学,关于爬取豆瓣图书信息。现在就记住了相关的库了٩(ˊᗜˋ*)و

    • 博主
      Echo
      6 月前
      2023-10-26 11:06:07

      哈哈哈哈,我最近发现学爬虫,看别人分享的爬虫案例、逆向过程,比看b站视频有用的多。

  3. Gaspard.
    6 月前
    2023-10-15 15:03:50

    哈哈哈,没错,爬东西听着就好玩,但是真得小心哦
    哪天收到“律师函”就完了

    • 博主
      Gaspard.
      6 月前
      2023-10-15 17:13:38

      哈哈哈没事,我这里面啥都没有,连代码都没有

      • Gaspard.
        Corrain
        6 月前
        2023-10-15 21:16:38

        《免责声明》

  4. Gaspard.
    7 月前
    2023-10-15 9:50:04

    这“副业”拓展的
    我个软件人都不会呢 学到了

    • 博主
      Gaspard.
      6 月前
      2023-10-15 14:20:31

      hhh,最近的突发奇想

      • Gaspard.
        Corrain
        6 月前
        2023-10-15 14:39:36

        有想法就学着做
        更学到了

        • 博主
          Gaspard.
          6 月前
          2023-10-15 14:48:54

          有时学点这些东西还挺有趣的hhh

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
( ゜- ゜)つロ
_(:з」∠)_
(⌒▽⌒)
( ̄▽ ̄)
(=・ω・=)
(*°▽°*)八(*°▽°*)♪
✿ヽ(°▽°)ノ✿
(¦3【▓▓】
눈_눈
(ಡωಡ)
_(≧∇≦」∠)_
━━━∑(゚□゚*川━
(`・ω・´)
( ̄3 ̄)
✧(≖ ◡ ≖✿)
(・∀・)
(〜 ̄△ ̄)〜
→_→
(°∀°)ノ
╮( ̄▽ ̄)╭
( ´_ゝ`)
←_←
(;¬_¬)
(゚Д゚≡゚д゚)!?
( ´・・)ノ(._.`)
Σ(゚д゚;)
Σ(  ̄□ ̄||)<
(´;ω;`)
(/TДT)/
(^・ω・^)
(。・ω・。)
(● ̄(エ) ̄●)
ε=ε=(ノ≧∇≦)ノ
(´・_・`)
(-_-#)
( ̄へ ̄)
( ̄ε(# ̄) Σ
(╯°口°)╯(┴—┴
ヽ(`Д´)ノ
("▔□▔)/
(º﹃º )
(๑>؂<๑)
。゚(゚´Д`)゚。
(∂ω∂)
(┯_┯)
(・ω< )★
( ๑ˊ•̥▵•)੭₎₎
¥ㄟ(´・ᴗ・`)ノ¥
Σ_(꒪ཀ꒪」∠)_
٩(๛ ˘ ³˘)۶❤
(๑‾᷅^‾᷅๑)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
小黄脸
热词系列一
tv_小电视
上一篇
下一篇