QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2757|回复: 0
打印 上一主题 下一主题

用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2021-7-30 16:25 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1 _% z3 d& I7 K! [+ l* d
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    ! ~7 t8 R7 _; ~* O1 q( X今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    3 [" F2 K9 M, J% p9 ~2 C康康大家都怎么说!
    4 S! J) q2 \# O
      @: Z. Y6 D' n6 W* m! s

    ' }, w3 B/ y( X/ T$ B& n+ T/ g' D& J2 r" Q3 o
    # P; F! r: |, K3 g+ W0 _8 ?
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    5 n9 k7 t2 D" R; i4 Z% d7 F- @$ F. j0 R, T+ X2 d) W5 o

    * P' n$ Q- o" l8 {) X如何安装模块:
    , @  P6 k2 J6 Q7 |( O2 P$ M
    : K& e) G" g- V1 k) z
    6 z8 l" [  r' V  H" ^5 J* w% K3 n
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    ; Y5 b) \1 P# S( Dpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    & X; v% p& _9 I! F如果模块安装失败了,可能是这些问题:
    0 K8 J9 U+ U! q  ^) }+ N0 J' {& s6 v2 c7 [1 [
    8 I1 l( C( n1 g
    提示:pip 不是内部命令- D" c) Q! f( [( W8 S$ Z2 O
    你python环境变量可能没有设置好
    8 f5 ~1 q  J8 n" L: O; Y+ M有安装进度条显示,但是安装到一半出现报错了. p" p* `+ A5 @( @5 c1 O
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    ( T  e: B* Q! \read time out 网络连接超时 你可以切换为国内的镜像源
    ! ]3 \2 b1 `2 X( i: [  N/ G明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    6 ]- [; X- E: h7 v/ S- C2 ~3 z4 ~你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    ; {3 H, s8 p* H3 ~; j- ?可能安装了多个python版本% p" o6 h* R7 E7 c1 K' @
    安装一个版本即可
    ' v8 j1 z/ O% e7 ^Python做爬虫到底可以做些什么呢?
    ) B0 S! Z* R. N- q5 C4 S" H& U8 j" {3 G* p$ U/ A0 p
    : d# G* @* e6 Z6 w7 p. `
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…5 v. c1 q- r7 J; v# F7 v* `  C0 J
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    8 V' P0 S3 u7 e2 E可以刷课 可以刷网课 自动 还能自动批量注册账号
    3 }1 ?6 h3 X6 @0 \3 D( _6 r模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    $ |1 ^. l% [& H8 L; a% ], ~  R普通B站视频可以爬 番剧是需要会员的
    8 G+ Q. i8 k; I8 ?0 M0 x
    1 K5 M  X* T8 M: v& G
    ; x& X, r9 I4 |5 O% J$ s4 I2 L
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)0 ]1 l- U, x4 P2 G: k/ m6 O; ?& o& l
    " g0 h- }( B) ?7 C, I" ?9 T& v
    6 @  t& J3 o) v" Z4 R
    1. 确定目标需求 (弹幕数据 那个视频弹幕)% e7 ^# d/ Z" f! D1 g, K- I' ?
        确定了; o- W# f) {, @) `& Z
    2. 找数据 (数据的来源分析)2 d. G2 S  X9 T
        简简单单 找到了1 u: ~6 C/ }! T7 m* G/ g' U
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    & w% U4 H& k% R    请求方式: get / post, \$ X8 D+ c. P9 b. B8 R& Q* I
        请求头:
    2 {' |  j, A0 Z8 R    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    / b; v& [9 o$ s8 i+ `    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    + d* S- T$ o# ~$ c) d- c+ \4. 获取数据 7 n7 ^" c; k7 O2 g/ b2 T
        文本数据 response.text 获取网页源代码
    # n5 y0 _% [, e4 n! Q( B/ J* w4 o3 D    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
      x; x4 ^4 c* x9 o, ?! ^& p    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 7 J4 P0 r! {% A. i6 d2 l+ o
    5. 解析数据
    ! t" I2 ?* S7 {2 i6 b, V# j    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 " A4 R' @& P$ `
    6. 保存数据6 N" a8 b6 `: @: B' Z8 P( M0 `
    11 P4 I& Z' Y/ t: u& O2 O
    23 c  y, \8 x$ g7 d
    30 j) M+ P3 m% W4 g# X$ U9 K% }
    46 J  N* j5 m0 b/ C- `
    52 a. N# K' y3 q5 n
    6
    : U5 q9 t# t2 T; j: ^; \. P7) u) T( X" r* A. Z2 T; ?6 K
    8' X  G+ r0 N- j% ]+ f
    9
    " W1 u. y5 p7 j' M10; B' w8 \! T4 v0 D6 h( Z: q9 Y
    11
    2 ]& b; N, ]  |# P$ a& M) F126 C& {+ K- l9 v; Q7 @1 l1 ?
    13
    ' _3 s8 L  V1 I( A* D9 \; K- C14$ w, v8 y8 U& o% W" F9 n2 d. H
    15  v3 Q+ B2 N, `1 @& n# p
    16
    ! k3 ^+ K5 Z* Xpython除了做爬虫数据采集,还可以做什么?
    & z4 M6 Z3 t" X兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    6 l: v8 p5 I+ F" r: T) Z# U+ i0 ~# @( y3 y5 q5 n
    " \' [6 i# i3 _
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    4 E  Z, D* s/ ^比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;( V* D% k2 [. h) m. ?0 }
    我可以做到这样么?% e  X, A: |" g3 S& @# t
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    ; s, B  @) v& o) ]; R6 P如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    2 o2 ?2 A% \8 H+ t8 S% R
    3 Z7 W4 x3 `* P/ J7 d+ w
    4 a  t3 m: [+ k
    爬虫开发(脚本)(就业/外包) 可见即可爬
      X4 k1 g/ T3 g  z  q8 F8 ]5 @虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!, ]8 e, ]2 M' u3 W
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    . ]  a$ P) D9 [" M之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    ( |: A1 Z) W# w7 [3 ^& D3 E# k0 ^/ R2 L* H5 y* j1 ]
    # T: E1 ]! S% K; w, _+ y
    数据分析(就业/外包)
    ; a# Q9 l; Q4 N8 n+ q5 ~; Q  ]6 P8 t* F, s: B1 R# J2 Y

    - H. p" \- B$ V' o  m. L! x4 `自动化(脚本)
    5 C: l% ?2 `( J/ s8 ]6 T7 K
      t. ^9 h) F- T- G$ _$ j

    2 M3 K8 p8 {+ z+ ]* J. y8 U游戏开发/辅助(脚本)
    & D* n. I+ x% T$ Y& W& J1 a' c9 j: w# x$ _8 Q% ?

    ) {- o6 s  g: k4 k  e1 O( H4 G人工智能(研究生以上学历 要求很高)
    + [: Z2 k3 \! L0 J
    , ~. D3 |5 X5 ^! q5 ?+ S
    ! N: f, e5 c8 f
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。" Z. b) ]: b3 O) ?& F* ~0 {, @, C- y

    7 w2 z. G( O. B
    # \" d( A( v3 c% K
    我们开始正题吧
      z6 t3 A3 ]1 o
    3 E" P1 b: {* Z
    $ ^5 M/ ^  D8 U/ @* @' {
    爬虫部分:2 w' {7 N8 c' y1 |
    发送请求 第三方模块 需要pip install requests+ m; u, Q2 l, m. x8 R; B" d
    % M5 r  P% |. @. D
    4 H3 p. e! G6 T2 l
    import requests# d  O) Z9 _& ?) o
    import re  # 内置模块
    + N( y9 S# k8 ?$ q1 D
    1 [3 W" a0 f% z  H$ Z
    # ], g" d/ ~% Q& t  T9 W
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
    ; f0 N/ Y7 q" v6 P  t% W2 }1; x& s' u& f6 d6 z
    26 X7 k; ~" n2 [. j
    3
    7 ^0 A8 e1 L2 V6 E! \0 C2 S4
    6 I" P) l1 r* r请求头的作用就是伪装2 u% m# }" Q& p- ?8 s% p0 h( g. }

    4 d# Q# s" z$ r7 \! r" g; Y. A& ~
    # T0 A* a, [! U- J+ d9 ^8 c6 i
    headers = {
      }; c; U2 `+ a# D3 L3 G    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'( ?) W0 H' e  |, O/ r' g- h6 v& x
    }( q" C) i; S9 k% O$ D7 e
    1
    ) G# J& ~0 I' c, z5 @! _, d25 {/ j& `5 z$ T4 @7 [
    3+ @+ W7 B7 W) f' c- d& {+ Z
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    # ?- U% w6 f4 ~" W函数传参
    " ~* b- _$ V; K/ ^' y1 C0 P$ b! c5 h  T$ p/ ^# f' E: `( W& t

    & Z; c9 z, W! g; [& q& y' y/ R" Wresponse = requests.get(url=url, headers=headers)
    4 f, m  j! a6 f1
    8 H/ j4 s& v+ s& ^! [3 d<> 对象 对象意味着你可以调用里面的方法或者属性$ V% _  Y' N: p% e( k5 M+ J. V
    200 状态码 请求成功
    : C0 }4 |: Z# H- a获取数据 文本数据$ j* F. A" v7 @2 A
    自动识别编码
    9 P, e$ B) r* J( C; k( M* l$ |7 a; d" p
    % P$ E. ^2 m, k: h
    response.encoding = response.apparent_encoding+ V/ _9 s) a6 ^: _
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    6 A; Q" M, s, H. b6 t& D, X+ v8 f1! S% G" @" N( D
    2
    3 [* H: E; ^$ B2 vcontent_str = ‘\n’.join(html_data)
    + Z' t! v% P- j9 Q* f5 e# p! b( s; T7 k6 W& F; [/ b" ~9 U0 M

    + ^8 X( L4 o  d, X+ I* o# r7 s要列表转成字符串 ‘’.join(): O, o$ \0 F7 k  P1 ]
    for 遍历
    ! X  G. _) r. I# {保存数据 保存字符串
    7 m+ S  G: T: ^" L; xfor content in html_data:/ Y) ?0 e& P" p3 a# {2 y: o$ C' Q
        # mode 保存方式 w 写入会覆盖 a 追加写入
    * U9 D. @1 i% m1 t" F5 a    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:. f, v  K4 P: t9 b( B
            f.write(content); Z# z* E5 D9 T) ~8 t
            f.write('\n')
    % L  X4 N2 o: J0 A- f3 }+ @- y6 g# t. k: ?( H

    ; d% D9 f$ f+ ?, ~# `9 E# print(content_str)) j+ H$ D( A, ]* _: N4 n
    1
    ; u! p& a6 W% i% y$ o' u2
    7 y  w8 `* A8 ^. Z' u# h$ x+ Q39 P+ c1 _; V  j
    4
    6 d! `( N  B6 s+ I8 Q! B5. c+ z# o8 M2 @, z! w8 |& V
    6
    2 O* V* @7 F! g! g# H- l' t78 |* M- x$ u4 X# w7 c
    爬取结果
    * `' q% ]1 o/ t* V; ]7 E
    6 ~4 D* `  o% n$ p
    5 m- w9 ~4 g- t, Z# }, ~

    . c: S9 ^) j% F, i% k% U* _- u) b: z

    - |& R# s7 k  a: S然后我们再来实现制作词云图部分
    8 j" K" K" a+ g; Z  W6 B& ]
    , L% q& W8 l& \# p5 E# ~4 ^

    1 F0 Y* ]0 a2 H0 d* g首先要安装这两个模块1 h5 ^$ P/ z# i2 z" h

    " Z% N9 n- K3 L9 v

    $ V" h- S! k2 h" Q. K  Z6 aimport jieba
    ! z( c2 L' A  C1 n6 J) m5 Z. Uimport wordcloud( e+ @3 G  C- j. l
    1
    ' O/ C% X! w7 }2
    ; m* Z% L  |% A/ K一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    ( a% B9 z+ J  j. ]6 R& M+ G/ u; {0 w' z- o' o9 g$ X

    : G& w7 N, C6 c4 `f = open('弹幕.txt', mode='r', encoding='utf-8')
    8 f( A4 I  C. \/ ]/ ~& X# V+ Mtext = f.read()  D3 \7 w, A* `1 ]4 B* l5 C
    txt_list = jieba.lcut(text)' n0 I9 R& A2 i) A% f5 ]/ G7 a. L
    # print(txt_list)
    * |/ N* K! |, H5 t% J1' ]+ l, L, P/ ^' d
    2; \& x9 y" j1 k% Q, M
    3% [2 ]7 U3 Y" d4 G
    4
    3 U" f1 a: ?/ M列表整合成一个字符串
    8 O7 N3 q3 `. E" V. S2 _1 g* J1 g( D
    & i. J0 e8 D, P3 d3 c. Y3 s

    % ?. C  h: \$ I. Z1 _, F7 z  }7 Qstring = ' '.join(txt_list), ]  A: B. \- g) R
    print(string)1 Y) E' g8 n0 d0 A; u
    print('---'*50)
    7 p# I# P9 p* Q4 \( s2 |9 R: M& cprint(str(txt_list))
    ) S! }) L$ k1 U" R3 v$ c* i% N, y1
    6 D/ U$ M- u! B2
    ) l8 M5 m1 e7 c: T; I3
    6 b( I/ `* S. r2 E0 K1 `3 M47 Z& P6 I/ Y" C/ B3 v1 U
    词云图设置" ?8 [" S* G  \& l: C
    / D5 w+ u  A( T! m  h8 l
    " P$ k; n: Q% R* o7 G2 \9 u
    wc = wordcloud.WordCloud(; d$ E/ X& q% N- r* ^7 a. m
            width=1000,         # 图片的宽
    * ~; _7 m6 P& c6 y/ k- H        height=700,         # 图片的高
    ! Q4 r' B! o/ a  q" b        background_color='white',   # 图片背景颜色, a7 i/ k/ S4 u, G6 P# b! W/ ]
            font_path='msyh.ttc',    # 词云字体* Z# e5 }! i/ ^0 z2 f" u
            # mask=py,     # 所使用的词云图片5 F; M7 a3 t% T, L" e6 _* ~
            scale=15,3 v( ]0 {5 ]+ R( L# s& G8 K
            # stopwords={words},         # 停用词7 \# |% y/ E( o! U- e# G
            # contour_width=5,8 Y) a/ I* [$ P7 i2 ~: b. P8 `
            # contour_color='red'  # 轮廓颜色
    : s' _. Z6 I! ^3 K' l6 j6 N& W2 [2 f)
    * v' t6 j7 U7 h! n: e3 j3 L11 I6 d$ ^+ G% n  a& g
    2
    - }& N  s' L  f+ \" x# U" T3" C: d. n5 v0 N( p# z; S" `
    4$ P( |" x, Z& b3 ?3 c. D
    5
    + C; R8 W5 I- j5 C6% k  o* X. q! N1 u
    7* w2 A+ Y1 C5 g
    8; V; C) p( g! C, G
    9" I& ]- z) _8 B
    103 a  o5 L% ~4 ]# c  a" X- C
    111 o" ^4 T; d* t
    给词云输入文字) r6 B1 h/ O& }# f/ q

    / r. W" k) ]0 Y& t! ]/ c
    $ r- A" U9 j: h, K" s
    wc.generate(string)
    - v! T/ ?2 l; t2 }17 ]0 o2 Z/ T  q% K8 o# d2 t$ C
    词云图保存图片地址
    & Y$ n0 i1 E# K: ~( X
    ! V  @8 X$ K1 y* x& i

    & }8 K. U3 ]- o3 M* O- _wc.to_file('output1.png')4 l: r7 I; x3 I+ f5 z
    1
    % p2 }/ Q& x* y6 N) K0 d; s词云图的过程中有点慢,大家不要心急
    # m/ B7 E: b% K; ?2 C% K3 K' O
    $ V& a8 C. v$ l/ D+ X! h' \6 t
    8 i) p. _# x" q
    这是最后的结果4 Q) j/ U6 h0 j
    8 W- m$ }8 G3 E. J- o( i
    8 ?* s( X, E9 G- I% h
    没有加停用词,所以一些无用的词比较多" Q6 i$ ?- l$ s5 }- k

    ( d, v; e, O0 Y  P
    2 Y0 A% [. Z- @( ^2 @, V8 N
    stopwords={'了', '啊'}- c7 i/ F" P- D, H/ t
    1
    & k' N. F, H8 x* a# d把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
      j( g) F; h" b9 ?2 q我们再来看下- y9 i& v- y% n, A8 p6 T

    7 p5 ]3 q! g9 P+ i$ G! n* O

    ' H6 J/ ~' d% a$ S+ h1 D+ r7 N不知名网友:666666 牛批 老哥我要学!!!
    - n+ F! h7 X% p) c: L1 ^  v$ V/ g9 L5 S" g

    3 U4 s/ a' U6 c& |# S. F) s: N% M0 F

      @8 v- J: ]+ i* F! B3 R5 ^————————————————
    8 `) b# Y* d- u  Y版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    3 o. ~& q5 ]$ l7 O+ n原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    & u9 L3 `  i: y/ u& H' W( F' c, P7 D" _1 a6 B' c( a3 k
      ^! R3 C4 W- G$ e( J+ X7 F. p
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-21 08:53 , Processed in 0.587111 second(s), 50 queries .

    回顶部