QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3144|回复: 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
    ! k1 G6 l: L$ J( p7 X& A# s
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!) k9 g6 K9 `7 g3 z) i
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!. @$ q* [+ B% |! E" m2 U
    康康大家都怎么说!
    , R7 F- `& C( A* b- g2 n% G0 U, [4 b2 U! Z  ~* ~) n" Y  I/ G
    / A$ u  K1 V" ]& @8 P9 W. D# s

    ; k' |" m7 u8 R5 f
    * \0 @9 v2 M' y: u, V
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。" t3 p2 t* a' o7 ^8 T  N: R

    # B+ U1 ]  O8 B1 S$ h4 c$ y

    # O: y  C2 X! Q如何安装模块:
    $ Q5 S! `+ ~/ W) R0 ~# j) _% n
    1 v1 _& O" E1 ^$ T

    . k( n9 n# p- A6 a: {5 pwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    3 J5 k% f7 t+ n: ~* Jpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车) v% P1 {& O" n7 r1 E* j- ~
    如果模块安装失败了,可能是这些问题:
    4 B% Q" z. Y' h0 R2 n, c$ W7 G1 V, l( h+ _! C- I4 n$ W3 l. p! S
    + h# D, C" z0 I  H) x4 r
    提示:pip 不是内部命令
    2 y0 s' K6 p8 f( R你python环境变量可能没有设置好5 a" b' a3 t, ~1 q. j2 f/ v
    有安装进度条显示,但是安装到一半出现报错了  g* r* y0 p- u; }! A! ?
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB9 K5 N5 e- r# ~1 ?4 o
    read time out 网络连接超时 你可以切换为国内的镜像源1 _- k  y8 X" U' \- f& t5 w
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
      B6 a0 N4 B+ B你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
      h4 w; S) I0 R0 _可能安装了多个python版本
    # ]( Q& M1 O# h8 c  s/ Z# v安装一个版本即可
    * W" W* r- b. \1 ?* A6 {Python做爬虫到底可以做些什么呢?% [# H+ T: E/ W: ]

    % |0 B/ a0 ]& Y8 C! |3 V

    7 ^6 `9 Q' V/ ~$ h2 x2 \" M- t常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…- x3 o6 @$ @" @: E5 H4 ^0 _. p
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量4 G9 N- `; v* Z
    可以刷课 可以刷网课 自动 还能自动批量注册账号
    2 V) U% G5 h* j  s) A' m模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    1 `( J& m) u8 t' Y普通B站视频可以爬 番剧是需要会员的
    ' \3 q- }% |+ s% L6 Q1 O1 v
    . L* d- }, \1 F% m( |

      O1 c; q# K6 T9 C8 i爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    ! @. ]1 n) b* w
    / N( w  U* W) \  R; M# c2 ]" C

    $ j' p  ~2 f# I1 Q, {% W( n, F" P3 G1. 确定目标需求 (弹幕数据 那个视频弹幕)
    : w  l0 O7 [8 k! I( _4 L( ]; p    确定了2 o+ Q* `* g" T( t, g
    2. 找数据 (数据的来源分析)
    - R. t/ n& `! E    简简单单 找到了, M! M$ j4 p9 s5 z- z- f: v
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)- b( U7 ~; w" m/ R- e
        请求方式: get / post
    , V( G& N4 ]; O" K3 V    请求头: . p& D4 y# j; u
        https://api.bilibili.com/x/v1/dm/list.so?oid=376200196/ N( @( |. Z. j4 V0 }
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    ; n8 [/ j6 W) q0 i, ~2 K7 e0 a4. 获取数据 * O& X) z( B8 v; ~4 D. G
        文本数据 response.text 获取网页源代码4 U2 I& Q/ U0 w+ c( i8 ?
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多8 @  r3 {6 l* m5 I
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
      n2 h' R7 l: r7 U1 a5 N+ r- Q5. 解析数据
    : U" U3 k3 f. W9 U    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    4 o: K- N1 t( C3 O6. 保存数据
    1 s# M  `, k7 `/ I( r" w1! t- C3 c( h. l5 Y
    2
    7 D! h+ f1 o, V3
    $ Q4 C! h  J; G% L4 O( F4" p0 D& e# N2 b
    56 C( R  U% [3 R! a
    6
    6 c& ^3 S0 S& T" ]7
    - _& z( g7 e8 ^! Y; Z9 a8
    ! `5 V) {0 @! Y. }9
    . F! D/ ?* e" {3 Z4 n5 a' g( f% I10
    2 N  |4 o. r- V+ b, H5 H11
    + u! F% `4 O; ^* h+ j$ D* q12
    " G* e% a0 X3 y  F) [. `& O13# t$ Y8 M$ i6 ?0 k4 K$ Q) k
    14* O+ a. @* j& d
    15
    6 q& {& W8 U, P  g* i$ r# S/ Z16
    ; j: p- F2 F, wpython除了做爬虫数据采集,还可以做什么?
    6 b7 k% F# ?+ n1 @* ?; }兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    : m$ x  X+ V- K+ w: t+ g+ {& N( l1 t. C
    " c3 I4 r) @8 F3 I
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    . j4 X1 [5 a) o8 r; d比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    , H9 t) B& [: z4 \( U. [: t- @我可以做到这样么?
    9 J/ N' s7 L) D" a$ {% Q0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;3 E. V% ^2 f! |
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    / t3 ^# G$ T  f, H5 [- C5 t/ `9 `: k+ e- i# e

    9 o# C* k$ [2 z爬虫开发(脚本)(就业/外包) 可见即可爬
    9 |* A* ?: e; y( f虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    - K: |& T5 v1 }很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    1 U3 Z0 X& ?0 W7 }3 X) o' @之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!) X, z" L' U5 ]( _5 k! S0 I! `3 m

    ' v! ~4 e8 _0 R
    4 z* N( I( u& _& j6 F; X- v
    数据分析(就业/外包)
    9 a+ i- `( R1 f3 |" G& l4 m) Q; o1 Y* w, i3 c" W# ]- ?0 c& M; \; X
    7 ~& r# d% S. _: W
    自动化(脚本)
    * Z6 K/ Z$ ^- v  q& n1 q2 W; V- F9 W  i* t' f2 m2 I4 j& H9 w

    . `4 J; t% c0 Y! \2 z  q. p8 C游戏开发/辅助(脚本)8 G8 d1 z5 ~* R) O, M8 f! u9 ~8 N
    3 X) z6 h' {8 A

    # g1 R( K3 q2 B: a% _! [1 F. k人工智能(研究生以上学历 要求很高)# l( H4 X; s/ s/ a- I; z

    + I9 s- a6 U2 ]) @# x4 y/ e3 B

    3 E" p4 N+ A5 U+ Y9 _. \等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    ; C  c+ K4 I! v! n5 W8 G, o$ e$ y% o

    ; L2 r3 t: j" X% S' [我们开始正题吧
    , O) Q2 Z5 F+ _) X* \" V. U% ]: ^" m- L

    * W9 R- q) Q6 O爬虫部分:/ L7 m" K! c5 v6 j
    发送请求 第三方模块 需要pip install requests
    3 [- `; C  s9 I& ]2 k! i; o& Z; u/ P# |: }
    9 z6 v+ a  e7 U, V) O6 i0 Z5 P
    import requests
    + g0 D3 z9 H# x, eimport re  # 内置模块
    5 Z- }! q! V- `" C  ^; i1 I: J! _1 C% s5 V5 m

    1 W, f4 \4 h$ B! o) Y. Uurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'# ^6 R: w( v; `( ^
    1: C0 ~# n6 a! l* s) C' x8 F
    2
    6 r6 x8 F( t( i% e( R6 Y  [2 G3" k! q( A" x$ l. v2 V! ^
    4; ]+ E* G2 ?: h0 e+ L- v4 \
    请求头的作用就是伪装4 @. Q( n' \- w- I. w( v) n
    4 e/ C6 X& K; d) U; u2 ^8 p! K

    ; @2 O$ I9 M: [$ _! ^headers = {
    7 a, A  o! G. V, o1 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'9 @& l2 Y4 l+ j) R* U* p2 o
    }2 V& D! N" k2 }9 O' f3 _/ N% C
    13 U9 t( j! g( {
    2
    0 }# {9 W6 e2 N; b3
    0 T  e' H& x, a8 d模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    * r2 ]: w' {& b" o* W函数传参$ m- E- v; \$ k$ v! {2 B, B5 `

    , `" Y1 i! o2 q1 C- P$ w* Q7 c
      Z& O4 |. H' m0 R( V+ T7 P* B: s
    response = requests.get(url=url, headers=headers)
    ( d# w) ?. V" I8 R. M  n10 w# u3 o: q* I7 F  l
    <> 对象 对象意味着你可以调用里面的方法或者属性# m6 t- B7 N# R7 T3 N9 r
    200 状态码 请求成功# m4 r5 U; z1 V7 z9 B8 m5 C
    获取数据 文本数据
    : h7 Y9 ^$ {' e2 _  i自动识别编码
    ' P; l! G7 c0 e, D. m9 \; V# E
    1 [  B/ p# s$ i( `+ t
    5 x/ u; I. s4 Q! E9 \
    response.encoding = response.apparent_encoding" j& d7 ]% w/ y
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)0 @1 G& M# A2 R- ?0 n
    1
    2 T5 K+ s3 D6 z$ C2
    / @! _! E- x) P( e( Ucontent_str = ‘\n’.join(html_data)
    % c4 `2 B, n9 [  M9 V  F0 ?7 P8 g7 K  v" `" C& V8 U
    - J7 g9 `7 J1 L3 T2 A
    要列表转成字符串 ‘’.join()4 D9 ?% ^" m: m, _# c  t
    for 遍历- Y- ^8 c& p5 T8 m
    保存数据 保存字符串  y! X7 H+ B/ U
    for content in html_data:
    6 [' v3 [! o3 u4 c( m- j    # mode 保存方式 w 写入会覆盖 a 追加写入  c9 K9 R5 A  D4 D
        with open('弹幕1.txt', mode='a', encoding='utf-8') as f:$ ^# z( X8 C  M7 k" k+ d1 _; W* `" b
            f.write(content)
    9 j8 D" n' O+ y! m; D! C        f.write('\n')
    & A6 O' e, T. Z) i6 ^' V! Y% f# }8 \- E( v& ^( j* e, J: @
    # `1 o4 `  X. ^! u$ q9 s
    # print(content_str)
    ; P9 H3 g! h! b" L9 K+ u. i; d& L1
    ) r& i7 D3 S3 O7 S" C  H2
    $ F! A4 Q2 k9 ^3
    3 H2 q% B6 R/ y. X# X! v4
    $ I7 o+ `% p7 M. {# f% R5
    ' P' y: \. j- P) X69 t/ L% X4 U' v6 v  d4 L
    7
    # Z, D4 A1 z: ^. R9 m爬取结果
    . z4 W# e5 u" N
    - l, u2 n& _5 p- j1 _/ l

    9 _; e! n% f5 O: Z' A4 `1 O' R7 ~! N- |; b) c+ [- q

    3 Z& G! ^5 P& D' H+ Q1 W然后我们再来实现制作词云图部分! T& _5 g, f$ t% f1 O& ~
    % V- t2 l4 D$ u* G
    ( E. h! R+ T6 h
    首先要安装这两个模块
    2 B4 I1 m$ X0 h, x8 b, o
    + X0 L0 J5 U7 b% \1 c  h" ]

    5 s' D6 H1 l- K2 {% i+ c6 cimport jieba" P& v; d4 i8 b. b0 C6 `* b
    import wordcloud; f) J1 K3 i$ o- q
    1' L; X( [1 D% ?! k) q
    2. l5 ^- s8 w. l, }7 I4 `# f
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    : ^) \! R$ A' a- f' m3 @
    & O0 z! i$ I  l

    + c* X; |, {5 `. b' Z! U* ff = open('弹幕.txt', mode='r', encoding='utf-8')5 R0 O& K6 R+ m9 c& T! u
    text = f.read(). [: `- `& B! P
    txt_list = jieba.lcut(text)
    ; b: e  ^8 l. \/ S# print(txt_list)( ^" G# H: E7 B- T) v3 [& a
    1
    8 @5 ]- F0 @. L* u6 ?. `2) f4 i$ p; I  t
    3
    3 Q8 W0 w2 k7 D9 {- O. w! e0 B, z41 Z# n5 A2 B6 V4 w( W. d% t
    列表整合成一个字符串; M( m" d. R. ~8 t; H( P4 g
    6 U. e+ s9 q+ q$ u) \

    ( f# i+ U- S$ Ostring = ' '.join(txt_list)* ]. O7 ^- d5 }  ~- ^7 U
    print(string)" g; Z8 J; `( A/ w4 c) v3 z( |
    print('---'*50)  \' V9 c% K) E" e
    print(str(txt_list))
    ! T! g8 {; |$ `$ ?1
    1 A  F- t  h; p2 W) Y9 `2
    8 }6 U4 h; ?1 d3 |% `37 c. |3 M& P$ O( z( D+ f
    4
    2 {* {" n0 ^$ F" V7 @- h词云图设置
    ) i! S' ?& ?. E% P7 J3 S# H4 O& P
    ) B4 p) X; a/ S/ n

    ) G8 ^& [5 k: u# pwc = wordcloud.WordCloud(
    $ y8 Z4 v5 y8 \; W  ]* i        width=1000,         # 图片的宽2 {2 I2 ]% R: Q- A/ ^. q
            height=700,         # 图片的高! P: H  ]! i8 C& W; K0 d
            background_color='white',   # 图片背景颜色- L- n" @0 B" j1 f6 {: z- t5 Z; }) X
            font_path='msyh.ttc',    # 词云字体
    1 E1 Z7 Y) J% ?( d        # mask=py,     # 所使用的词云图片
    / X" Z0 e& f5 r# j        scale=15,: n7 W+ L0 ]" {
            # stopwords={words},         # 停用词; X! Y6 }3 E4 s" s' g
            # contour_width=5,/ x  e+ o$ w3 O0 a- d5 x" `
            # contour_color='red'  # 轮廓颜色& p9 C  l  p( H8 @( b7 x1 S9 M$ p
    )0 @4 X* r) a( r: `- x
    1, t9 f" J- W& @# S0 i5 O
    24 w9 q& J9 F; e0 r) _9 n' u2 q  ?
    3: H# \6 [# u0 N, A" k( |
    4! L4 t( ^0 z' O6 X: m, y
    5" h$ U/ }! F4 A9 t6 k
    6' K; u3 O$ _/ y7 _0 m+ b
    77 \$ d0 ]! ?- h. y3 I2 P( Z" Y6 K
    87 c9 {  v" }6 U
    9
    7 n# P2 O8 ?0 m4 a" ^10
    * Z: T0 g2 K+ Y" u5 R: D113 l; _% W% u! ?' n6 O" K" v
    给词云输入文字6 m7 }9 O" u1 g6 f9 d9 Z6 d6 V
    $ P7 _- Q5 }" k5 V4 o" D' }  u
    $ @; V: @$ e2 ^' ?& K: R" r: z$ j1 Q
    wc.generate(string)
    9 W: s) C" g0 j- f1/ H8 l( T+ i. \+ l. ]$ Z. D
    词云图保存图片地址
    $ T5 v: V5 L' L$ ^, L4 ^" r
    + s3 Z) U  [! f# p6 E9 l7 E# i& |
    2 h. C. [; `( N, V! k9 k
    wc.to_file('output1.png')1 @! |5 V( p: I2 n8 D2 o5 R
    19 f' Z5 g, L* z& c$ {  }5 l
    词云图的过程中有点慢,大家不要心急& `7 K. h% R/ l  W9 L) [6 c) f

    $ j& L, H% H& y( c2 t) ^) J

    : Q) y4 a; M7 Y5 q# @. E  b这是最后的结果
    % p  l6 z, Y4 `6 J0 y$ S
    ( A0 n3 Q% L& V( p
    0 w& e- n3 c) A# H
    没有加停用词,所以一些无用的词比较多
    . w* d5 t- ~4 j1 D4 @( x8 \) k0 P1 F, ]4 x- G2 ~% }+ q4 Z8 [0 x
    & P( D7 M9 T' \7 o1 v! r& V+ ^
    stopwords={'了', '啊'}
    7 ?" q% j3 m+ p- U1 t1
    7 A) a- _6 |, I1 q9 E! }把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。" @9 t7 ]9 |+ t
    我们再来看下
    2 l! e+ H+ z1 q0 \) o
    3 ]+ C+ j. _4 ^" z0 X0 j! E$ D

    ; [  o2 @2 W- Z& f: U不知名网友:666666 牛批 老哥我要学!!!6 b& s: E6 N: E# M

    . O1 r, r! L/ ?9 D) `

    , A5 c' E: E! u5 S1 U7 \; ?% n9 f$ M* t4 q
    ; e4 q# ?5 l+ \% i) r5 u1 G; V: g

    / ]; a  C8 C8 L, {9 ~————————————————
    * N  O* e: X! L: ?$ n, A1 V版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    7 e& x9 N5 e! s; h5 o5 D原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 B& z8 U( z. v5 [. t
    + Q! S% ?5 e& f

      V% o2 Q7 Q$ L$ b
    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-7-28 18:50 , Processed in 0.570730 second(s), 51 queries .

    回顶部