美文网首页
Bilibili视频封面获取艰辛之路

Bilibili视频封面获取艰辛之路

作者: 刘点石 | 来源:发表于2018-03-06 12:46 被阅读0次

    1.石原里美的锅

    话说近日日本女星石原里美在网上很火,大有与我家Gakki分庭抗礼之势。本着知己知彼百战百胜的原则,我打开B站搜索石原里美,结果如下:

    image

    然后目光尖锐的我看到一个封面看起来挺不错的视频

    image

    打开之后完全没有封面额影子,于是熟练地打开F12F5,很容易地拿到了视频封面地址:

    image

    于是打算写一个获取B站视频封面的Python脚本。

    2.B站的深坑

    经过上面的分析,思路就有了:

    1.用requests模块获取网页源代码

    2.用正则表达式匹配https://i0.hdslb.com/bfs/archive/****.jpg

    3.用urllib模块的urllib.request.urlretrieve保存文件

    看起来思路清晰,很开心,于是打开VSCode开整。

    找了另一个看起来封面好好看的视频:

    image

    脚本运行出现错误

    Traceback (most recent call last):
      File "a.py", line 34, in <module>
        real_img_url = 'http:'+str(img_url[0])
    IndexError: list index out of range
    

    看起来是正则表达式匹配出错,于是打开网页源代码,发现了原因:

    image

    文件的拓展名是.png,果然很神奇,于是修改一下正则表达式:

    img_url = re.findall(r'//i0.hdslb.com/bfs/archive/[0-9a-zA-Z\.]+', html.text)
    

    试了一下果然成功了。

    然后我就发现这俩视频竟然是同一个UP主投的稿,哇良心UP主啊,打开他的主页,发现了另一个视频

    image

    果断拿到神秘代码av20252181试一下,然鹅:

    image

    心中说了一句mmp,然后默默打开网页按F12F5,没找到。。。

    于是又打开网页源代码,CTRL+F查一下i0.hdslb.com/bfs/archive,没有任何结果。。。

    就在我想要放弃的时候,突然想到酷安有很多获取B站封面视频的软件,心想给手机抓个包美滋滋,然鹅:

    image image image

    mmpB站还我石原里美

    绝望之际,心想私聊UP主要封面照片吧(2333),好吧其实我打开源代码,搜一下hdslb.com/bfs/archive,妈耶竟然搜到了一个看起来特别像的

    image

    打开链接,竟然成功了。。。

    仔细一看,图片域名开头是i1而不是i0

    修改正则表达式为:

    img_url = re.findall(r'//i[0-9].hdslb.com/bfs/archive/[0-9a-zA-Z\.]+', html.text)
    

    然后测试:

    image

    奉上原图:

    image

    除了上面说的那一大堆还遇到了headers、cookie等一堆问题,还好都解决了。

    下面奉上源代码:

    import requests
    import re
    import urllib.request
    
    header = {
        'Cache-Control':
        'no-cache, must-revalidate, max-age=0, no-store',
        'Connection':
        'keep-alive',
        'Content-Encoding':
        'gzip',
        'Content-Type':
        'text/html; charset=UTF-8',
        'Date':
        'Sun, 04 Mar 2018 14:39:00 GMT',
        'Expires':
        'Thu, 31 Dec 1997 23:55:55 GMT',
        'Pragma':
        'no-cache',
        'Server':
        'Tengine',
        'Transfer-Encoding':
        'chunked',
        'X-Account-Via':
        'HIT from shd-app-3',
        'X-Cache':
        'MISS from cn-zjwz3-dx-w-03.hdslb.com',
        'X-TKID':
        '152016926293028483424',
        'Accept':    'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding':
        'gzip, deflate, br',
        'Accept-Language':
        'zh-CN,zh;q=0.9',
        'Cache-Control':
        'max-age=0',
        'Connection':
        'keep-alive',
        'Cookie':
        '填你自己的cookie',
        'Host':
        'www.bilibili.com',
        'Referer':
        'https://passport.bilibili.com/login',
        'Upgrade-Insecure-Requests':
        '1',
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
    }
    
    url = 'http://www.bilibili.com/'
    av_num = input('请输入B站AV号:')
    testurl = url + str(av_num)
    html = requests.get(testurl,headers=header)
    img_url = re.findall(r'//i[0-9].hdslb.com/bfs/archive/[0-9a-zA-Z\.]+', html.text)
    #print(img_url)
    try:
        real_img_url = 'http:'+str(img_url[0])
        urllib.request.urlretrieve(real_img_url, 'C:/Users/18337/Desktop/'+str(av_num)+'.jpg')
        print(str(av_num)+'视频封面保存成功')
    except IndexError as e:
        print('未知错误:'+str(e))
        exit()
    finally:
        pass
    
    

    折腾了一晚上又到了凌晨,此时此刻,我的感受就是:

    石原小姐姐真好看呀!

    Python小白一枚,自娱自乐,大神勿喷,手动/doge

    欢迎评论、私信、来呀一起tree new bee呀~~

    欢迎关注微博:@_刘点石

    相关文章

      网友评论

          本文标题:Bilibili视频封面获取艰辛之路

          本文链接:https://www.haomeiwen.com/subject/bfihfftx.html