吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17209|回复: 34
收起左侧

[Python 转载] Python利用B站API获取视频信息

  [复制链接]
skeep 发表于 2017-7-23 12:02
本帖最后由 skeep 于 2017-7-23 12:28 编辑

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

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


[参考链接]:https://www.v2ex.com/t/347986

编写爬虫首先是分析想要爬去的页面url格式或者html页面中的标签的链接。

11

11

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

22

22

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

33

33

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

44

44

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

55

55

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

66

66

77

77

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

88

88

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

99

99


主要代码如下

#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 导入python包

1 导入python包

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

2 获取输入

2 获取输入

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

3 爬虫主体

3 爬虫主体

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

4 主函数

4 主函数

效果展示

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


111

111


222

222

点评

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

免费评分

参与人数 14吾爱币 +14 热心值 +13 收起 理由
silvanevil + 1 + 1 谢谢@Thanks!
l_lei + 1 + 1 谢谢@Thanks!
5scommander + 1 我很赞同!
xouou + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
aizhiqun + 1 + 1 谢谢@Thanks!
Nickdlk + 1 谢谢@Thanks!
zyjia + 1 + 1 我很赞同!
楼主你好萌 + 1 + 1 我很赞同!
厦大我来了131 + 1 + 1 楼主,点个赞,不错
RuiBox + 1 + 1 用心讨论,共获提升!
xiaolei0517 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
黑山老道 + 1 + 1 厉害了
NO_25 + 1 + 1 谢谢@Thanks!
虐心i + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

2205 发表于 2017-10-16 00:03
用PYTHON3测试了楼主代码,修改了几处地方,功能正常。

[Python] 纯文本查看 复制代码
#! /usr/bin/env python
# -*- coding:utf-8 -*-

import time
import requests
import sys
from prettytable import PrettyTable
import importlib

#设置编码方式
importlib.reload(sys)

#返回爬取的数量
def get_Craw_num():
        print("-----------菜 单--------------")
        i=int(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 += 1
                t += 1
        print (x)
        print("爬取完成")

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


请输入爬取视频的起始编号10086
-----------------------------
+----------+--------+-------+------+------+------+------+
| 视频编号 | 播放量 |  弹幕 | 回复 | 收藏 | 硬币 | 分享 |
+----------+--------+-------+------+------+------+------+
| av10086  | 260976 | 5211  | 5211 | 2499 | 261  | 361  |
| av10087  |  3551  |  109  | 109  |  5   |  2   |  1   |
| av10088  |  3674  |  79   |  79  |  23  |  0   |  2   |
| av10089  |  520   |  869  | 869  |  82  |  0   |  5   |
| av10092  |  1983  |  20   |  20  |  5   |  0   |  1   |
| av10093  |   --   |  103  | 103  |  2   |  0   |  0   |
| av10094  |  1250  |  34   |  34  |  30  |  2   |  2   |
| av10096  |  4451  |  188  | 188  |  44  |  13  |  2   |
| av10097  |  1577  |  14   |  14  |  4   |  1   |  2   |
| av10098  | 11731  |  281  | 281  |  9   |  0   |  2   |
| av10099  | 10422  |  523  | 523  |  12  |  0   |  1   |
| av10101  |  3305  |  123  | 123  |  7   |  0   |  1   |
| av10102  | 19357  |  366  | 366  | 144  |  14  |  7   |
| av10103  | 95637  |  510  | 510  |  34  |  1   |  6   |
| av10104  |  2732  |  82   |  82  |  19  |  0   |  2   |
| av10106  |  709   |  10   |  10  |  5   |  1   |  1   |
| av10108  |  1620  |  274  | 274  |  2   |  0   |  0   |
| av10112  | 11754  |  195  | 195  |  22  |  2   |  1   |
| av10114  | 37335  | 1654  | 1654 |  23  |  4   |  8   |
| av10115  |  3360  |  796  | 796  |  14  |  0   |  2   |
| av10116  |  1231  |  15   |  15  |  4   |  0   |  3   |
| av10117  | 38308  |  809  | 809  | 782  |  55  |  23  |
| av10118  |  6738  |  134  | 134  |  97  |  9   |  2   |
| av10120  |  1355  |  111  | 111  |  13  |  0   |  2   |
| av10121  |  629   |  17   |  17  |  2   |  0   |  2   |
| av10123  |  2736  |  189  | 189  |  14  |  0   |  2   |
| av10124  |  5088  |  312  | 312  |  54  |  0   |  0   |
| av10125  |  6703  |  138  | 138  | 146  |  6   |  5   |
| av10126  |  4492  |  210  | 210  |  67  |  6   |  6   |
| av10127  |  2635  |  42   |  42  |  1   |  0   |  3   |
| av10128  | 17438  |  163  | 163  |  40  |  3   |  2   |
| av10129  |  2195  |  81   |  81  |  6   |  0   |  3   |
| av10130  | 32944  | 1207  | 1207 | 616  |  33  |  9   |
| av10131  |  6244  |  80   |  80  |  76  |  6   |  6   |
| av10132  | 23754  |  491  | 491  | 164  |  7   |  5   |
| av10134  |  1290  |  280  | 280  |  5   |  0   |  1   |
| av10135  |  2187  |  227  | 227  |  1   |  0   |  1   |
| av10139  |  304   |  93   |  93  |  38  |  4   |  2   |
| av10142  | 10548  | 1352  | 1352 | 101  |  15  |  4   |
| av10143  |  1776  |  99   |  99  |  1   |  0   |  2   |
| av10144  |  7776  |  239  | 239  |  31  |  4   |  10  |
| av10145  |   --   |  44   |  44  |  2   |  0   |  2   |
| av10146  | 26050  |  707  | 707  | 268  |  24  |  6   |
| av10149  |  6555  |  214  | 214  |  20  |  0   |  0   |
| av10152  |  1480  |  12   |  12  |  6   |  0   |  3   |
| av10153  |  6526  |  326  | 326  |  29  |  2   |  1   |
| av10155  |  2395  |  436  | 436  |  42  |  1   |  3   |
| av10158  |  1255  |  107  | 107  |  3   |  1   |  3   |
| av10160  |  468   |  14   |  14  |  4   |  0   |  2   |
| av10162  |  1545  |  168  | 168  |  13  |  2   |  2   |
| av10166  |  1587  |  14   |  14  |  9   |  0   |  2   |
| av10168  |  4473  |  34   |  34  |  15  |  0   |  1   |
| av10169  |  6049  |  568  | 568  |  54  |  0   |  2   |
| av10170  |  3829  |  277  | 277  |  21  |  1   |  2   |
| av10171  |  1499  |  19   |  19  |  3   |  0   |  0   |
| av10172  |   37   |  10   |  10  |  9   |  0   |  1   |
| av10173  |  928   |  24   |  24  |  7   |  0   |  7   |
| av10174  |  2015  |  162  | 162  |  20  |  0   |  1   |
| av10175  | 13456  | 1362  | 1362 | 151  |  0   |  1   |
| av10177  |  1086  |  53   |  53  |  7   |  0   |  3   |
| av10180  |  9995  |  965  | 965  |  6   |  16  |  2   |
| av10181  |  3717  |  75   |  75  |  37  |  1   |  2   |
| av10182  |  677   |   5   |  5   |  3   |  1   |  1   |
| av10183  |  1021  |  39   |  39  |  3   |  0   |  1   |
| av10184  |  4232  |  209  | 209  |  27  |  3   |  5   |
| av10185  |  1919  |  230  | 230  |  24  |  1   |  4   |
+----------+--------+-------+------+------+------+------+
爬取完成
 楼主| skeep 发表于 2017-7-23 12:31
czyuyu 发表于 2017-7-23 12:24
很好很详细的教程,感谢分享!

感谢评论,一会将第二篇整理好再发布,下一篇是爬去电影天堂的最新电影的下载地址,到时候可以收藏使用啊
语然 发表于 2017-7-23 12:25
白胡子的花猫 发表于 2017-7-23 12:36
很详细的教程
ArcherMars 发表于 2017-7-23 12:45
get,学习到了
黑山老道 发表于 2017-7-23 13:02
这个分析的相当到位透彻 看的明明白白
zxdpim 发表于 2017-7-23 13:07 来自手机
学习了,简单例子,注释很容易看懂,谢谢分享
Dlan 发表于 2017-7-23 13:07
本帖最后由 Dlan 于 2017-7-23 13:10 编辑

没什么亮点,不过还是谢谢分享,如果能加上入库、和数据图形分析 ,才是一套爬虫应该做的
Novae 发表于 2017-7-23 13:08
谢谢分享
wakichie 发表于 2017-7-23 13:11
厉害了啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 19:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表