【python爬虫】抓取B站视频数据及相关信息(二)

转载于:http://blog.sciencenet.cn/home.php?mod=space&uid=3189881&do=blog&id=1105242

在此之前请先了解一下相关的上一篇文章:

如何利用python抓取B站视频相关信息(一)


在上一篇文章给出的知乎链接里,我所提及的获取B站up主主页所有视频的方法主要是:

  1. 使用selenium库调用chromedriver模仿浏览器行为

  2. 爬取up主主页html源码

  3. 分析html源码,找到带有aid的标签,记录下来


这种方法是比较笨拙的,采集效率也比较低。主要是需要模仿浏览行为,这就意味着需要等待html加载,并且因为每页只能加载30个视频。如若视频数超过30,需要进行翻页操作,而每次翻页操作都意味着要等待html加载,如此往复,效率可想而知,所以这种方法是不常用的。但这种方法又是初学者最容易想到,也最容易操作的,所以我放在第一期里说。


今天这里提出一种更常用的方法,即分析json数据。json数据是怎么来的?抓包分析得来的(以后有机会再拓展一下)。下面给出的这个链接是别人抓包分析的来的:

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包对其进行解析,解析后的文本就可以随心所有的调取其中的数据了。使用方法大约分成三步:

  1. 使用requests包爬取该url中的所有文本内容text

  2. 用json包中的json.loads(text)函数进行解析

  3. 调用解析后的文本中数据


如果写成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的时间了。


猜你喜欢

转载自blog.csdn.net/baidu_37355300/article/details/79660975