QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3101|回复: 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
    8 [# V7 q5 B# r0 s! m
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    & r" H- j, `- x6 b2 z5 [* T, O, }今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!. H4 L9 S. M2 `5 s( o$ Q
    康康大家都怎么说!
    : j9 [$ A( ?# X6 A( F3 B, P! J* |$ s/ E  W, X9 ^
    ' \6 x& a' D5 k- S
    8 B+ b. \" @2 B
    $ S1 i- H4 v* T2 ^
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    5 B6 o0 U, |8 n# r' m7 _  G
    2 f8 H  E5 a( G# B
    % i5 B8 Q! \" S! O1 ~
    如何安装模块:
    ) C% O9 [9 n( D( c7 A/ M9 q7 u: P/ L* |% m. z3 I
    2 F0 L4 x8 F! r4 F& h
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车% v( m9 d' g) D: b4 o' c" Q) K: O
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    6 ~; r8 T5 \  R1 w7 r# A如果模块安装失败了,可能是这些问题:
    * B+ p5 {: P' ?1 P. ^$ Q$ @5 K) }
    ( t' Q+ a( q# q. v# w

    $ e1 I! p# o: @! d提示:pip 不是内部命令; l4 e/ s8 s3 z: A2 [% k. B
    你python环境变量可能没有设置好( y) p8 V/ ^" p+ ]# I
    有安装进度条显示,但是安装到一半出现报错了
    ! G8 f; U1 m8 {% v& ?因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB) f, Y- ~* \3 G: ?& O4 {; s* k
    read time out 网络连接超时 你可以切换为国内的镜像源
    $ x. K2 W" W& j+ r明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    ( z0 D% }6 }0 Z" Z& b你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下8 d+ O+ `1 h; a/ W$ X2 h
    可能安装了多个python版本
    & h8 g0 Y6 @3 l; b( p8 [7 g安装一个版本即可; l. x: b: p6 @& S7 e  S8 j# z" o$ d
    Python做爬虫到底可以做些什么呢?8 T' _2 H* Q! i3 u% Z9 _. E

    6 \9 L' K. Q1 W( `) [0 J) G' K

    2 I/ L2 g) c( h6 `/ F/ ]常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…( V6 J: T, j& t' @* \% w
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量" |6 B6 L" r/ V# H$ R, z
    可以刷课 可以刷网课 自动 还能自动批量注册账号
    2 H, A  K& }- t' p/ {+ }. ?% L模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    # g( Y1 a* Z. F普通B站视频可以爬 番剧是需要会员的7 r  y. S4 [' @, E% v$ \0 r# k0 I
    ( ?7 X7 D; {, E- e- L$ E3 |6 j5 S

    % d/ i. c( W2 }& B0 G爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    ; U$ ?5 V  U" H
    / R% p6 N! i  O, ?6 |- }
    , \, o$ Z! _! T- u  l* p: o
    1. 确定目标需求 (弹幕数据 那个视频弹幕)9 B$ t8 O3 x& j* e9 |
        确定了
    0 D5 e; d! ?! F2 U$ h' T2. 找数据 (数据的来源分析): B# X6 E4 M0 s5 s) ~4 r; a( s
        简简单单 找到了
    5 V. [" l4 h8 A* P7 p+ W; W* o3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)% b* F4 e6 u# m1 g
        请求方式: get / post: c( o$ ]1 b) W. U: w0 |
        请求头: 9 Y! N) ?9 C: G! R6 _- S" Z
        https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
      d# [# S  h2 T    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站): p3 R& R! h% _0 N! Y
    4. 获取数据 ' D# z- ^1 h' _$ c4 z- V
        文本数据 response.text 获取网页源代码3 ?' Q% d+ E% n- |# ?6 i
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
      @: `" }/ x( W6 Z& |' g2 G    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    / |% L2 I- G4 N' w1 G5. 解析数据
    , V) \$ m0 Q) ]: J0 P4 G    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 4 q3 T2 H0 `) q: A
    6. 保存数据' J- w* D* w& n% d1 w/ _% w2 y
    12 V- ~8 }: Y" A/ f$ _
    2
    ; c- c4 V. u" L4 R3& _. H, X  o8 C$ r1 |& ~( z' \
    4! o% |$ r# E- D+ d/ G
    5" _+ G8 _$ Y- z
    6
    . y+ q( X- F0 g+ W77 B! r4 T) I/ Z9 q+ K! F% I
    8
    . }( G/ n% X  R$ P& V/ w9
    2 A2 x( T" Q' c  P( g3 D100 Y) p. a; r/ U* c: }) h
    11
    0 v* u, F( J# p) r9 \; i4 s4 l; h12! T! l0 Y- |+ J" Q( f
    130 v. y8 g; p: S, C/ Z3 K; z& E4 |
    14
    9 i5 A; j' U3 D. }& r& \+ _0 [- n" O15
    / u. l5 C% N) {& `16
    . p& C+ L) ^" opython除了做爬虫数据采集,还可以做什么?5 [# O9 p" b4 h; ]  ]! I- c
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包), x0 M; d- t" t4 j4 W: d3 A

    ( A& Y( d" Z! ^0 Q9 N" t! m

    % L+ e: s; A: R网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    4 C9 P: [4 |, p% N比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    % W; i5 L0 D+ t0 |我可以做到这样么?, k( ]6 U- b7 m
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    # V  z3 {* A3 n如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;6 b' O( H: _9 D. i5 [7 W

    ( J: e8 E( n- ^

    / c8 ^- w% h2 p" [. o爬虫开发(脚本)(就业/外包) 可见即可爬# P0 F+ s, O" m: _) k
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    ) a4 m, P! `3 z% g9 `6 o* I很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    7 ?9 _& p* l, F/ W% f+ a* T之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    : e" F1 K& ~8 Y. @' V: `) h# u  ]0 f- T
    & `; j+ W7 |3 ^2 |1 K4 a; q% t
    数据分析(就业/外包)
    ' |# P2 ^. v6 n4 B2 b) V1 h8 Y! u6 t$ P, n
    3 |( \- p6 ^- e) f& Q5 \
    自动化(脚本)5 u. }& [* p, R1 H
      }% I+ D% B' R5 F

    4 f6 B: c" {9 e' \游戏开发/辅助(脚本), O7 r9 H( V8 h5 k4 Q' V
    * `3 N. U3 G- Z, @/ C9 S

    ; U9 Q, c6 ~5 r, H2 I" c人工智能(研究生以上学历 要求很高)4 B" R2 d$ G+ R7 h5 q1 D
    + \7 B+ I& d' f# ]

    2 s, ]. ]& n3 A( F等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    % K; [- L8 z/ |2 u1 m
    ; W; z# Z- S+ R
    4 {& G9 l/ H9 a' J& k9 V
    我们开始正题吧
    + _$ u' ?* d% i6 h( D2 @3 x* G2 ?! h6 j) T7 m- ]3 Z

    . ~5 L, P0 v4 M( f* K2 M: `* J. h4 a爬虫部分:
    1 U/ ]" S. ]* |. K0 l- _发送请求 第三方模块 需要pip install requests7 Z0 ?. j) P2 X: V# u# b

    1 z# F( L7 z# R8 W
    2 T# ?8 r8 i: l( g# C, r0 e
    import requests
    & l7 u0 `6 P% j+ p: Limport re  # 内置模块5 b/ d: @& [2 z+ O

    * B8 c3 a# @; a, A
    4 t8 e9 b' {8 n. `5 `. _
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
    2 r5 T4 K; `' |/ q. Y) ~: Y1
    - ^  I7 Q! ]8 N: p- l/ ?% Z+ U, F2
    . T  _$ y1 ], v/ B9 v8 Q  ^; n+ Z3
    ) M9 ~* f4 s3 A4
    9 G9 s, m4 ~0 A) D" u请求头的作用就是伪装; d4 _! o1 L3 _5 W, F, k! `

    : X5 }& O: W( J

    1 w& w" \4 [( yheaders = {* @7 ?2 L; ]- x+ Y/ y# }4 w9 n  o: d
        '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', [) M( d+ \( I2 }# B3 V# d4 z* V
    }
    4 }( r& B2 o" q6 d7 X4 @# V14 A4 S% `  t3 `0 _
    23 G% r7 K5 v5 N# v
    35 Q* U- ?  B* T& [" k  p
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据; I. Y6 x' P/ @/ L. J' V
    函数传参  z8 U( n3 _+ p3 X0 e; f
    * K4 Y  C0 z( T# B# r+ [( V8 z, Z- V2 R

    & W1 u- n" n2 ^, R7 [; w) Z1 Cresponse = requests.get(url=url, headers=headers)
    % ]- K- U0 r' {1
    7 ?0 j* W6 P* d' T<> 对象 对象意味着你可以调用里面的方法或者属性
    ( P, {0 s( W& U0 k200 状态码 请求成功7 \$ t  E$ N+ Q; Y( W$ Z
    获取数据 文本数据  p; R" f' u, y( \6 h
    自动识别编码
    . D7 o& O9 c9 G* n$ N! e. P" ?2 r- S% Z# i" R
    5 j& w# A- \9 c* z, s
    response.encoding = response.apparent_encoding, e0 I5 K# ?& s; P. f
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)  @# B0 v$ I( f" S* t# X
    1
    . W( S% K2 z0 c; Q9 M6 T9 ~2
    7 ]& }0 y8 N  l& V# G' Ucontent_str = ‘\n’.join(html_data)
    , |% a8 l; F$ O& _6 ?" w
    7 j  s2 h. |) o. q5 ]
    1 G' }0 T0 C6 T4 b. P/ y$ @4 I& R! X
    要列表转成字符串 ‘’.join()
    / R8 z2 E' G+ s% _for 遍历
      ?: _0 M( H; C+ B4 J保存数据 保存字符串4 V7 M8 W% M) l. n' p' D$ M
    for content in html_data:7 f6 z$ n1 Q) C3 s4 g3 L/ X
        # mode 保存方式 w 写入会覆盖 a 追加写入
    % G! N% Q% x$ _" u$ O    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:, k+ p4 q$ U2 c6 e" T0 B
            f.write(content)3 t0 |% z' L1 `( u8 N' |, |4 E
            f.write('\n')
    7 A, i+ I5 p5 r0 q
    9 t5 ~3 m6 J' @8 k( [4 q1 |

    & H/ k  J: ]# A( s# print(content_str), ~3 _5 a. l+ i8 S+ e) l
    1
    ) V8 K- c7 Q0 J) q2
    ; A  B  ^. e: y, s# V2 P: \/ F3$ I+ c. _+ G- o0 T2 U
    4
    ) s0 @9 x' ]) A. J  y5- O5 x% u; \# [  j! k0 |
    6# r$ x$ D+ O9 W# `9 ?1 k( Y
    7
    5 u- J& G+ Q2 J  t爬取结果3 f- Y6 T( Y8 e6 R- T* ^
    ' h9 T) ]0 M$ o
    % m& _' {" j+ v( W0 G7 l4 H( r
    : C) v) u* L8 v! @$ _

    1 H7 o( l* c2 H. |+ w2 K- \1 \然后我们再来实现制作词云图部分
    0 C, @$ p- W9 K: Q7 ?- R. g4 g4 \/ L( x  W. n, j& ~8 {

    " s) V/ R  F: T' d% U! {首先要安装这两个模块
    5 q8 Z/ g( ]7 e# p& j) H) a8 _$ b, w3 o

    ( U, m6 V/ l5 h5 w4 D9 limport jieba( {8 b* w/ ~- Q! u5 T8 j+ d
    import wordcloud& ^; R* e! |  K% i
    1/ T! {/ a1 S1 A: N1 b" n
    2
    6 s8 g6 N" P" r; }一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    $ j* H4 A  ^+ D: d" n( _# u: `; u# b% q  p* H

    - Q0 |9 Q8 u/ H9 e9 Lf = open('弹幕.txt', mode='r', encoding='utf-8')
    ; y" F" v6 O3 ~& Q; d: T, mtext = f.read()
    ; P% f) L  P6 r7 v4 `txt_list = jieba.lcut(text)
    , E4 @. x* I" i5 g# print(txt_list)
    . T$ P  y( \2 M11 v( Q" s; e& l8 V. ~. }
    2
    7 m1 A0 g, q8 D- p3 W35 b+ x( W  m0 t$ R+ m1 C
    45 v, e) X2 o# V( j, o
    列表整合成一个字符串1 ~8 Z/ x( l( V: ]6 h
    9 Z# @! g2 `5 f8 z2 l5 x

    * j) A( q4 P5 }string = ' '.join(txt_list)  Z. }- A  `3 q: g$ Q+ t% C
    print(string)* l6 O/ y2 s, K7 j0 k
    print('---'*50)
    ' m) \3 E, J7 w- qprint(str(txt_list))
    - H2 E/ V# ]  e& a1( |& @7 H' z/ r
    2  W6 d' K( n' p% r
    3! ?1 w) f, R6 V# Z" ^' D! i
    4
    7 ?0 M1 R4 B) g词云图设置
    ; [' r5 t$ p' y4 }2 x  e, N, K; ^) M* p4 j0 H$ I1 l# t
    + Y/ {$ Z5 `7 P  l2 S9 t
    wc = wordcloud.WordCloud(
    4 l* E6 v/ \& P# d        width=1000,         # 图片的宽5 g8 p% E5 a2 N( k
            height=700,         # 图片的高
    ( h# b; ?( L' }, e8 K* Z7 Q9 M        background_color='white',   # 图片背景颜色
    3 e4 x5 t. M8 D) a) I* \        font_path='msyh.ttc',    # 词云字体
    + b) e, ^' u8 Z8 @  Y* k        # mask=py,     # 所使用的词云图片/ ~: _+ K1 ^. i+ X/ U9 K9 e: O
            scale=15,: Z. S2 z% ^: `1 G
            # stopwords={words},         # 停用词
    0 h9 L3 x7 x! p9 v/ P  ]3 n        # contour_width=5,
    5 o6 N% e# |) F5 D* I( B' U        # contour_color='red'  # 轮廓颜色  S* @: x6 h4 q& Y9 X4 {0 y4 u
    )+ H7 Z# x1 E4 v: Z& B/ s( L
    17 A6 G% S# U* W) p' Z' b
    2: M$ g# z- _& c& p# C' a" [2 y
    3+ D0 g9 R8 H2 E$ Q0 V9 g6 E
    4& _8 W' [3 }+ }6 Y
    51 M) x9 ]8 [4 t9 R7 s  R
    6" x9 K( P$ u% Q0 s; w" P
    7* _& [( V: m& r
    8
    9 z* X0 Q- F: Y4 K& F, `: m9/ @- \5 d$ v7 _/ ^' N6 [4 g
    10
    # H. D; c1 Z& D( a$ y1 g11) J  V3 a3 }5 i; V7 }- @
    给词云输入文字, y8 t7 ^+ }. z

    1 f, t- g7 P- W9 o) V! Z3 ~
    * W) F  F$ A3 \# n
    wc.generate(string)+ k: e1 a' {1 f8 m8 Q
    1
    & b$ n' j) p5 N9 I# i6 K# p- O: b词云图保存图片地址
    % ^1 R5 m: H# _# C9 F, z/ w0 A: |4 W, t8 U7 w; n

      J0 _5 B1 V; zwc.to_file('output1.png')# h/ {0 I3 h: y" z  f+ W; f1 W
    1* m6 A2 ^( p6 D1 P8 @. O1 k
    词云图的过程中有点慢,大家不要心急
    7 n5 [% B5 U# e# Z4 d- z8 Z. d1 T5 [( o0 \9 r4 S8 B3 ~" e

    ( q; ?  Y& G4 _' E- K- }这是最后的结果% h& [/ G/ u$ ~0 ~% M3 Q
    . [% e1 V* R6 D4 M" R4 b1 z# o

    ) B, q0 \3 `5 o* b没有加停用词,所以一些无用的词比较多5 M1 A9 W% p& A, f2 e

    2 A" t7 d. d$ g0 Z/ B0 R! a- G

    9 h/ Y, p% h- @3 ~( j, ustopwords={'了', '啊'}+ o% H+ Y8 l1 _. Z- g8 Z$ F
    1
    8 x" ^/ P" l1 t0 E/ t2 q& l把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    ( g. B. O" M* Y8 K我们再来看下
    " I& S4 ?* u( O, c: B% _0 b6 h* R! C. a5 ~  c2 ], Z8 A! E$ m3 J
    . V/ n/ n7 R9 T4 d2 t  C
    不知名网友:666666 牛批 老哥我要学!!!  J1 Z: s% ]! @0 e

    # C$ N4 U- Z" D9 D/ i! r8 n  W
    3 p- n5 _+ l+ N! z" n. E

    * s" _; p7 }, v$ {

    6 _$ f2 l% B+ S, V' y————————————————
    8 N$ H" E! U! b* m2 g3 `5 o版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) J; B* ~, u6 l5 }" p/ N5 m
    原文链接:https://blog.csdn.net/ooowwq/article/details/119211907) B! i. L0 @  T3 M

    % a$ P$ M( u6 ^, Q) r0 B
    4 q& ?, b, h1 ]$ H, d4 d
    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, 2026-4-13 12:27 , Processed in 0.411908 second(s), 51 queries .

    回顶部