目录
2.根据之前打开json文件的链接来修改需要爬取的url(第六行代码)
前言
在平静的日常生活中,笔者经常会发现自己收藏的视频突然被“河蟹”,变成已失效视频,但是却又忘记自己是什么时候收藏,视频的具体内容也完全回忆不到。自己喜欢的视频变成“已失效视频”这副冷冰冰的样子,总会让人感到好奇与一点遗憾。文章将讲述如何爬取自己收藏的已失效视频相关信息,希望可以帮助到大家。
一、网页抓取已失效视频的相关信息
在收藏内容中的已失效视频无法被点开,只能模糊地显示出该视频被收藏的日期,并不能为我们提供其他相关的信息,我们考虑使用Chrome的检查功能,找到数据的真实地址,从而找到已失效内容的具体信息
1.打开Chrome浏览器,进入个人主页的收藏夹,找到对应的已失效视频所在的那一页
2.右键窗口的任意位置,点击“检查”指令,进入下图所示页面
3.在最上方的一栏中找到network选项,然后刷新网页。此时,network会显示浏览器从网页服务器中所得到的所有文件,我们所需要的已失效视频的相关信息也在其中。
4.一般这些数据以json文件格式获取,因此我们可以单击network中的XHR选项,下拉找到开头为
list?media_id=xxxxxxx&pn...
格式的链接
5.双击打开链接,我们可以得到以json格式储存的数据,同时记住链接中对应的list?media_id后面的数字,它们对应着你的list?media_id,代码中将会用到。
6.看起来有些头疼,但是我们可以一行一行解析这些数据都代表着什么(这部分可以跳过)
上图其中一个未失效视频对应的数据,"tittle"是标题,"cover"是封面的图片url,"intro"是视频的简介,"upper"对应的是UP主的名字,头像等数据。
这张图中的数据对应的是一个已失效视频。可以发现,当视频已失效时,它的默认标题就会改为“已失效视频”,同时该视频原本的封面也不会被保存,但是视频简介与UP主的个人信息并不会被删除,通过这些我们便可以推断出该已失效视频的内容大致是什么。
二、脚本运行环境的配置(PYTHON)
1.配置python环境(略)
2.引入库
代码如下:
import re
from urllib import request
三、使用脚本
下面是读取已失效视频的代码(注:不能直接复制粘贴用)
import re
from urllib import request
i=1
count=25
for i in range(count):
url = 'https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxxxxxx&pn='+str(i)+'&ps=20&keyword=&order=mtime&type=0&tid=0&platform=web&jsonp=jsonp'
req = request.Request(url)
page = request.urlopen(req).read()
page = page.decode('utf-8')
string = page
my_match = re.findall('"title":"(.*?)"',string)
intro = re.findall('"intro":"(.*?)"',string)
upper = re.findall('"upper":{(.*?)}', string)
for eachone in range(len(my_match)):
if my_match[eachone]=="已失效视频":
print("简介: "+intro[eachone])
name = re.findall('"name":"(.*?)"', upper[eachone])
print("up: "+name[0])
print("========")
i+=1
使用脚本之前需要对该脚本进行修改
1.参数count是收藏视频页面的总页数(第四行代码)
可以看到笔者的收藏总共有27页,读者可以根据自己实际的情况进行修改
2.根据之前打开json文件的链接来修改需要爬取的url(第六行代码)
在这一行中,我们需要第一步中获取的json文件的链接来修改url
url = 'https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxxxxx&pn='+str(i)+'&ps=20&keyword=&order=mtime&type=0&tid=0&platform=web&jsonp=jsonp'
将
list?media_id=xxxxxx
这一部分中的xxxxxx修改为之前获得的链接中自己对应的list?media_id即可
爬取结果如图
总结
在笔者使用脚本爬取已失效视频的内容时,发现大部分失效的视频都是搬运视频,由于没有版权而被下架。但是搬运视频时简介都会给出原视频的链接地址,所以想要知道失效的视频是什么,只需要点击视频原本地址观看即可。
也有一些视频失效是因为视频原作者将其删除,或是因为对该视频的内容不满意,或是因为一些其他种种的原因,但不管怎么说,这些视频也曾经给我们带来过快乐或者感动,也感谢各位B站的UP主们能够给我们带来这么多有质量的视频作品。
附:将所有收藏视频的相关信息保存在本地文件的脚本
代码如下:
import time
import re
from urllib import request
import json
i=1
count=27
with open('D:\\bilibili默认收藏\\test.txt', "w+", encoding="utf-8") as f:
for i in range(count):
url = 'https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxxxxxxx&pn='+str(i)+'&ps=20&keyword=&order=mtime&type=0&tid=0&platform=web&jsonp=jsonp'
req = request.Request(url)
page = request.urlopen(req).read()
page = page.decode('utf-8')
string = page
my_match = re.findall('"title":"(.*?)"',string)
intro = re.findall('"intro":"(.*?)"',string)
upper = re.findall('"upper":{(.*?)}', string)
for eachone in range(len(my_match)):
print("名称: " + my_match[eachone])
print("简介: "+intro[eachone])
name = re.findall('"name":"(.*?)"', upper[eachone])
print("up: "+name[0])
print("========")
f.write("名称: " + my_match[eachone])
f.write("\n")
f.write("简介: " + intro[eachone])
f.write("\n")
f.write("up: "+name[0])
f.write("\n")
i+=1
f.close()
使用方法同上,结果会保存在D:\\bilibili默认收藏\\test.txt文件中