输入视频的bv号
输入你要取的页数
文件自动保存到本地
import urllib.request
import urllib.parse
import json
import jsonpath
def fun(url):
# 定制头部
headter = {
'accept-language': ' zh-CN,zh;q=0.9',
'referer': 'https://www.bilibili.com/bangumi/play/ss39532',
'sec-ch-ua': ' "Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': ' ?0',
'sec-ch-ua-platform': ' "Windows"',
'sec-fetch-dest': ' script',
'sec-fetch-mode': ' no-cors',
'sec-fetch-site': ' same-site',
'user-agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
resouter = urllib.request.Request(url=url, headers=headter)
return resouter
# 获取请求源码
def resout(resouter):
resouters = urllib.request.urlopen(resouter)
connet = resouters.read().decode('utf-8')
return connet
# 把bv文件转换id
def BlblBv(connet):
# 解码成json文件格式
jsonent = json.loads(connet)
# 获取返回的值
Bv_list = jsonpath.jsonpath(jsonent, '$..aid')
return Bv_list[0]
# 处理评论区页数
def json_blbl_Value(oid_url, start_pag):
# 拼接到评论区的api中
url = 'https://api.bilibili.com/x/v2/reply/main?next=' + str(start_pag) + '&type=1&oid=' + str(
oid_url) + '&mode=3&plat=1'
# 请求服务器
resouters = fun(url)
# 接收返回数据
connet = resout(resouters)
# 获取评论区数据
json_blbl(connet)
# 把评论区文件解析出来
def json_blbl(connet):
# 解析评论区的json文件
jsonent = json.loads(connet)
json_list = jsonpath.jsonpath(jsonent, '$..message')
json_name = jsonpath.jsonpath(jsonent, '$..uname')
# 遍历值输出
for i in range(len(json_list)):
# 因为获取的值第一个有一个0
if str(json_list[i]) != '0':
strvalue = json_name[i - 1] + ' 说: ' + json_list[i] + '\n'
fp.write(strvalue)
# 视频名字解析
def vide_name(bvid):
url = 'https://api.bilibili.com/x/player/pagelist?bvid=' + bvid
# 请求服务器
resouters = fun(url)
# 接收返回数据
connet = resout(resouters)
# 转json数据
name_Value = json.loads(connet)
name_Value1 = jsonpath.jsonpath(name_Value, '$..part')
print(str('爬取的视频是' + name_Value1[0]))
return name_Value1[0]
# 程序入口
if __name__ == '__main__':
bvid = input("请输入你要爬取的视频bv号: ")
start_pag = int(input("请输入你要爬取的页数: "))
end_pag = int(input("请输入你要结束的页码: "))
# 视频的名字
vide_value = vide_name(bvid) + '.txt'
fp = open(vide_value, 'w', encoding='utf-8')
# 抓取的地址
url = str('http://api.bilibili.com/x/web-interface/archive/stat?bvid=' + bvid)
# 请求服务器
resouters = fun(url)
# 接收返回数据
connet = resout(resouters)
# 解析出bv号转的oid
oid_url = BlblBv(connet)
for number in range(start_pag, end_pag + 1):
print('正在爬取第' + str(number) + '页请稍等')
json_blbl_Value(oid_url, number)
fp.close()
print('爬取完毕,请查看目录下文件')