|
在此之前请先了解一下相关的上一篇文章:
在上一篇文章给出的知乎链接里,我所提及的获取B站up主主页所有视频的方法主要是:
使用selenium库调用chromedriver模仿浏览器行为
爬取up主主页html源码
分析html源码,找到带有aid的标签,记录下来
这种方法是比较笨拙的,采集效率也比较低。主要是需要模仿浏览行为,这就意味着需要等待html加载,并且因为每页只能加载30个视频。如若视频数超过30,需要进行翻页操作,而每次翻页操作都意味着要等待html加载,如此往复,效率可想而知,所以这种方法是不常用的。但这种方法又是初学者最容易想到,也最容易操作的,所以我放在第一期里说。
今天这里提出一种更常用的方法,即分析json数据。json数据是怎么来的?抓包分析得来的(详细过程请阅读【补充】Chrome内置工具抓包分析)。下面给出的这个链接是别人抓包分析的来的:
http://space.bilibili.com/ajax/member/getSubmitVideos?mid=10330740&pagesize=30&page=1
简单的分析一下这个域名后,可以发现其中mid指的就是up主的uid,page是当前所在页数(json数据只能显示一页,其余的数据需要通过更改page的值来获得),pagesize则是这一当前的一页的列表中显示多少个视频的数据(如果视频数超过30,pagesize的最小值是30个,减小也不会有任何的变化)。
打开链接后你就会发现这是一串字符串,因为它是json格式的字符串,我们可以使用python中自带的json包对其进行解析,解析后的文本就可以随心所欲的调取其中的数据了。使用方法大约分成三步:
使用requests包爬取该url中的所有文本内容text
用json包中的json.loads(text)函数进行解析
调用解析后的文本中数据
如果写成python就是下面这几句话:
data = requests.get(url) json_text = json.loads(data.text) item = json_text['data']['vlist'] aid = item[i]['aid']
从代码中可以看出这个json数据的部分结构,最外层是data,其次是vlist,aid数据放在vlist中。我们可以这么写json数据从而体现出其数据结构来:
{ "data": { "vlist": { item 1{ ... "aid": XXXXX } item 2{ ... } .... } } }
如果你仔细观察,这个url中还包含了up所有视频的播放量,评论数,上传时间等基本信息。在采集视频aid的同时还可以顺带将其它信息一并采集,这样就节省了再去访问api的时间了。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-24 10:50
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社