lovesvidon的个人博客分享 http://blog.sciencenet.cn/u/lovesvidon

博文

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

已有 8337 次阅读 2018-3-22 21:57 |系统分类:科研笔记

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

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


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

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

  2. 爬取up主主页html源码

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

  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的时间了。



https://blog.sciencenet.cn/blog-3189881-1105242.html

上一篇:【python爬虫】抓取B站视频相关信息(一)
下一篇:借由某视频平台出发简析一下当下网络生态环境的一角
收藏 IP: 114.102.146.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-24 10:50

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部