1.石原里美的锅
话说近日日本女星石原里美在网上很火,大有与我家Gakki分庭抗礼之势。本着知己知彼百战百胜的原则,我打开B站搜索石原里美
,结果如下:
然后目光尖锐的我看到一个封面看起来挺不错的视频
打开之后完全没有封面额影子,于是熟练地打开F12
和F5
,很容易地拿到了视频封面地址:
于是打算写一个获取B站视频封面的Python脚本。
2.B站的深坑
经过上面的分析,思路就有了:
1.用requests模块获取网页源代码
2.用正则表达式匹配
https://i0.hdslb.com/bfs/archive/****.jpg
3.用urllib模块的urllib.request.urlretrieve保存文件
看起来思路清晰,很开心,于是打开VSCode开整。
找了另一个看起来封面好好看的视频:
脚本运行出现错误
Traceback (most recent call last):
File "a.py", line 34, in
real_img_url = 'http:'+str(img_url[0])
IndexError: list index out of range
看起来是正则表达式匹配出错,于是打开网页源代码,发现了原因:
文件的拓展名是.png
,果然很神奇,于是修改一下正则表达式:
img_url = re.findall(r'//i0.hdslb.com/bfs/archive/[0-9a-zA-Z\.]+', html.text)
试了一下果然成功了。
然后我就发现这俩视频竟然是同一个UP主投的稿,哇良心UP主啊,打开他的主页,发现了另一个视频
果断拿到神秘代码av20252181
试一下,然鹅:
心中说了一句mmp,然后默默打开网页按F12
和F5
,没找到。。。
于是又打开网页源代码,CTRL+F
查一下i0.hdslb.com/bfs/archive
,没有任何结果。。。
就在我想要放弃的时候,突然想到酷安有很多获取B站封面视频的软件,心想给手机抓个包美滋滋,然鹅:
mmpB站还我石原里美
绝望之际,心想私聊UP主要封面照片吧(2333),好吧其实我打开源代码,搜一下hdslb.com/bfs/archive
,妈耶竟然搜到了一个看起来特别像的
打开链接,竟然成功了。。。
仔细一看,图片域名开头是i1
而不是i0
修改正则表达式为:
img_url = re.findall(r'//i[0-9].hdslb.com/bfs/archive/[0-9a-zA-Z\.]+', html.text)
然后测试:
奉上原图:
除了上面说的那一大堆还遇到了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呀~~
欢迎关注微博:@_刘点石