首页 编程教程正文

Python利用B站API获取视频信息

piaodoo 编程教程 2020-02-22 22:01:45 878 0 python教程

本文来源吾爱破解论坛

本帖最后由 skeep 于 2017-7-23 12:28 编辑
Python利用B站API获取视频信息

这两天工作中需要写两个简单的爬虫,我自己参考网上的资料,手动实现了一下,今天总结一下发给大家。


[参考链接]:https://www.v2ex.com/t/347986
编写爬虫首先是分析想要爬去的页面url格式或者html页面中的标签的链接。 打开浏览器,输入地址:http://www.bilibili.com/video/av10001

11.jpg (110.69 KB, 下载次数: 1)

下载附件  保存到相册

11

2017-7-23 12:11 上传

在浏览器中按F12打开监控面板,选择network页面,该页面中可以分析浏览器与服务器之间的交互情况。

22.jpg (141.88 KB, 下载次数: 0)

下载附件  保存到相册

22

2017-7-23 12:11 上传

按F5刷新页面,浏览器会向服务器发送很多请求,服务器也会对浏览器的请求做出相应相应。我们在下方选择Other,这样便可以筛选出其他类型。

33.jpg (115.21 KB, 下载次数: 0)

下载附件  保存到相册

33

2017-7-23 12:11 上传

我们从中选择json类型的HTTP请求,然后逐个观察分析,在每个HTTP请求的详情页中,选择Response,查看服务器发回的响应。

44.jpg (170.44 KB, 下载次数: 0)

下载附件  保存到相册

44

2017-7-23 12:11 上传

一直向下分析,直到找到一个返回的JSON中的内容正是我们所需的那条请求记录,其开头为stat?callback,可以看到其内部的返回数据与页面中的是有着对应关系的

55.jpg (169.05 KB, 下载次数: 0)

下载附件  保存到相册

55

2017-7-23 12:11 上传

在右侧的HTTP详情页面中选择Headers,然后点击Edit and Resend按钮,将找到的链接复制一下

66.jpg (134.07 KB, 下载次数: 0)

下载附件  保存到相册

66

2017-7-23 12:11 上传

77.jpg (134.57 KB, 下载次数: 0)

下载附件  保存到相册

77

2017-7-23 12:11 上传

在浏览器中新开一个标签页,然后将刚才复制的链接粘贴到到浏览器地址栏中,可以看到得到的便是json串。

88.jpg (67.87 KB, 下载次数: 0)

下载附件  保存到相册

88

2017-7-23 12:11 上传

我们看到这个链接非常长,带了很多冗余信息,不方便我们最后编写爬虫的URL,尝试一下之后,发现最终可以简化成http://api.bilibili.com/x/web-interface/archive/stat?aid=10001, 访问该地址,发现我们的主要数据依旧存在

99.jpg (46.23 KB, 下载次数: 0)

下载附件  保存到相册

99

2017-7-23 12:11 上传

经过一番观察之后,我们可以发现我们要搜集的视频信息,可以通过 “http://api.bilibili.com/x/web-interface/archive/stat?aid=” 拼接上一个具体数值来访问
主要代码如下
#craw_bilibili.py
import time
import requests
import sys
from prettytable import PrettyTable

#设置编码方式
reload(sys)
sys.setdefaultencoding(‘utf-8’)

#返回爬取的数量
def get_Craw_num():
        print("-----------菜 单--------------")
        i=str(raw_input("请输入爬取视频的起始编号"))
        print("-----------------------------")
        return i

#爬虫的功能实现
def start_craw(url):
        print("开始爬取,请稍候")
        headers={}
        x=PrettyTable(['视频编号','播放量','弹幕','回复','收藏','硬币','分享'])
        t=0
        i=get_Craw_num()
        while(t<100):
                r=requests.get(url.format(i),headers=headers)
                if r.status_code ==200:
                        try:
                                j=r.json()['data']
                                favorite=j['favorite']
                                danmaku=j['danmaku']
                                coin=j['coin']
                                view=j['view']
                                share=j['share']
                                reply=j['reply']
                                favorite=str(favorite)
                                danmaku=str(danmaku)+" "
                                coin=str(coin)
                                view=str(view)
                                share=str(share)
                                reply=str(reply)
                                av_num="av"+str(i)
                                x.add_row([av_num,view,danmaku,reply,favorite,coin,share])
                        except Exception as e:
                                pass
                else:
                        break
                i=i+1
                t=t+1
        print (x)
        print("爬取完成")

#main函数
if __name__=="__main__":
        url='https://api.bilibili.com/x/web-interface/archive/stat?aid={}'
        start_craw(url)

部分代码解释 首先是导入所需的python库,以及设置编码方式为utf-8。其中PrettyTable库的作用是可以将数据按照表格的形式展示出来。代码为:

1.jpg (19.01 KB, 下载次数: 0)

下载附件  保存到相册

1 导入python包

2017-7-23 11:52 上传

编写获取用户输入的爬取数量的函数。将输入的数值转化成int类型,然后返回,具体代码如下:

2.jpg (21.34 KB, 下载次数: 0)

下载附件  保存到相册

2 获取输入

2017-7-23 12:06 上传

其次是爬虫的主体部分。首先是用prettytable,插入表头信息,然后开始构造url地址,用requests方法获取url内容,对于返回的json串进行解析,然后将每个数值对应的插入到表格中,如果插入记录到达100条,则退出该函数,具体代码如下编写主函数。

3.png (124.66 KB, 下载次数: 0)

下载附件  保存到相册

3 爬虫主体

2017-7-23 12:06 上传

主函数直接调用,爬虫的主体部分,代码如下:

4.jpg (10.86 KB, 下载次数: 0)

下载附件  保存到相册

4 主函数

2017-7-23 12:06 上传

效果展示 随便输入一个数字,如10086,然后回车,稍等一会便可以打印爬取结果

111.png (108.73 KB, 下载次数: 1)

下载附件  保存到相册

111

2017-7-23 12:24 上传



222.png (1.02 MB, 下载次数: 0)

下载附件  保存到相册

222

2017-7-23 12:25 上传


点评 xouou +10086  发表于 2017-8-3 21:14

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7338.html

搜索