输入视频的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('爬取完毕,请查看目录下文件')