QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3178|回复: 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
    9 U9 l) A2 s& w3 D
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!  k  G# n) x( t. ]. }3 v6 e( P' N
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    ' a4 \( t( l8 s1 R1 a康康大家都怎么说!
    $ R6 d0 H; B8 ^, j: l6 D
    ! O+ {1 R2 m8 b! U
      }5 @7 u& L( ~5 t( N$ h

    " s' J. V; ]8 j7 h: T! N. j

    ; t/ o. I7 i4 }5 k- i/ _$ p5 r开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    0 ]! a6 L' O1 g% _0 f. w, ]5 ]! N8 ^( n4 M/ c2 q: U

    : @5 _7 F+ _' T" U' u如何安装模块:- m0 e, p# I, G. k
    3 j- J- L  X  G8 C7 N

    ; _. g9 j. C& F7 ~# fwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车$ {% M$ j. d% @; f
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车: q4 q! a/ _6 s" x2 x* {2 Y6 o
    如果模块安装失败了,可能是这些问题:7 m# a; v+ A- Y$ D# @

    * ]4 h- K7 B! [! B) S
    ' P2 Q( o% Z5 X, c! f& h4 F
    提示:pip 不是内部命令
    , P# d- q4 _" C& [7 ]* q8 e$ a你python环境变量可能没有设置好$ _6 {, ]' f9 J$ V2 z
    有安装进度条显示,但是安装到一半出现报错了! a6 E" }9 `7 ^" U- M
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB4 g2 _& V: d' h+ s5 k
    read time out 网络连接超时 你可以切换为国内的镜像源
    7 O+ W. H/ t  W- a: T9 I明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块: v. m4 `2 k% N5 `" i  U
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下5 R) c0 w. X! @" {% ?, s% m& g
    可能安装了多个python版本. z) G( v9 x  T3 n
    安装一个版本即可
    - E2 s2 o4 X! |7 z! A  [Python做爬虫到底可以做些什么呢?, `, l6 a$ n2 a9 D

    , W4 F5 I- _8 s8 \7 p, Q

      J8 g4 @% a, i常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    1 }( l4 L! k8 R0 b4 n12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    ; r  F  w/ t1 \  ~5 b. b2 K. _& G可以刷课 可以刷网课 自动 还能自动批量注册账号8 U; x' b/ j7 x+ C8 c
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …; w. o1 Z" W1 f, S/ ?6 N# P2 l
    普通B站视频可以爬 番剧是需要会员的7 Y5 o  w0 g3 E( W- q5 s1 o

    3 D' b! o# H8 y- D6 o0 V# v6 Q$ K

    8 H) p7 Z+ }6 A+ F爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)! t$ N; G& T/ j* D6 _$ g9 n
    $ B( v, `  A- I# e+ a

    6 Q8 G; I" v) S4 `8 `  A1. 确定目标需求 (弹幕数据 那个视频弹幕)* o: x7 b* U# \7 w
        确定了8 f! |2 K4 F: i
    2. 找数据 (数据的来源分析)
    7 B5 `  B1 p5 K8 q    简简单单 找到了
    & o! ?& j1 R* \: \/ |. X3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)7 t2 a. D; X% v
        请求方式: get / post
    4 w4 Z2 d; R3 u1 \& R    请求头:
    # u" v! V6 \* C9 T" x; F: W    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196  R. e" K- U/ H5 `  I6 w
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    ) s& m, o1 E; b4. 获取数据
    % ^% w& @* h: s. _( w8 ~0 v    文本数据 response.text 获取网页源代码
    , o# l, k' a& Z1 C" K$ S9 U- d( x    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多  W! Y9 u; z$ |7 H
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    4 C6 C, a2 g( y; |0 p" c( r5. 解析数据* |1 W, T0 N$ [/ c5 }
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 . u/ T; }6 g9 Q% Z- D9 {- Q; I( ~
    6. 保存数据
    & v6 f1 y8 `9 C. Z  X# s1
    0 f$ f, u) X5 l& Q! f" }( P2
      m- m; _# |" M) L3  t: R# E; B. j  x  t( u
    4
    ; M+ T. `- z# _( X5( Q8 Z- q1 C8 Q% q9 d
    61 @: i; A4 S3 c* U) X! A
    7
    " }7 s% P7 |. E2 t/ \2 d4 P) u8
    ; P8 z9 {/ H; d9
    ' J* Q/ C3 n' n4 Y107 K' m, N- y  ?. x- A2 `/ J' x6 C
    11
    , V; ^9 W: C' E12' T  j( W: \9 }6 d& Y& r
    13
    ; ^- p4 q) E# u3 O1 t7 B$ P( f14
    $ F) ^8 _- P1 S7 f6 h; L1 M15
    ; h1 L6 ]( v4 d" j4 G16& w/ t- c, P. K* f; V# U+ y
    python除了做爬虫数据采集,还可以做什么?
    ; ~) l: y0 B. J  W% H% x兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    2 V9 z) B+ V3 Q: V1 H5 g9 q7 a/ }! z: S5 D( m
    % {2 r# k; J  t. j- I
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K) r2 k+ ?# i8 P: A
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;; {% j  s  I( Q* @* h* I
    我可以做到这样么?: Y- p2 M$ l: \  T% j; B4 B3 `
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    - ^% Z9 x& ?0 {+ H- T- t" b如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    ; b4 ~; d; Z  B+ A' |8 Q1 V( v
    . ?- P8 s3 k% G
    % B) s" ^# M8 D+ D6 _' K  ^0 S/ \
    爬虫开发(脚本)(就业/外包) 可见即可爬# }4 Z' g6 a! [$ D. G4 e0 H  z
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!$ R5 i8 I* n$ N
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    / @3 @3 E6 ~* x3 S0 v% [之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    * n$ V5 }) x! x" H" q5 ^: D" C4 x7 I
    3 m$ q( {! u( `
    8 u4 D8 f4 ^- }6 u
    数据分析(就业/外包)7 |' R. p" X: ~- c* Z! ~

    4 _& \" w5 n' [' o0 y( K( @) f/ d( H

    1 F8 m' b9 [) \) a4 t7 I9 o3 y3 @8 k自动化(脚本)" J6 @3 z# m9 B1 t  |
    " k: l' H0 f8 X$ P+ a4 t
    3 B) Q; I2 P0 D( m4 C
    游戏开发/辅助(脚本)
    4 j2 O0 O8 e5 e1 W  [
    6 R$ W6 t2 }( l; V  ?
    : w' I# M. ^1 H3 t, `
    人工智能(研究生以上学历 要求很高)! [  ~: R+ L; w' ~) Z+ m- F+ f5 B% Z
    * Z: a$ f; l& z! U( d
    + T, n' b+ ?1 t7 a
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    - z2 Z# D4 S+ `% d0 {' c% N( W3 ~1 G! Z+ ~  m0 L& s
    0 {$ F+ f+ _( `  B; [3 J2 F
    我们开始正题吧2 c8 k7 M( {3 \# X4 v# b
    % b% Y% m. j& F3 k9 b! ]
    - h0 t# D9 c- w$ W8 {
    爬虫部分:
    5 p0 x) l1 X6 e. v- P发送请求 第三方模块 需要pip install requests7 N( w& P# a! ~9 r

    9 e" B: n' e) R4 e6 j
    ; L6 ^- U; ?4 Q8 }; H; {: [" d
    import requests
    # D. x% m- k, ?import re  # 内置模块
    # }9 h$ a8 W5 c9 q0 ]) G0 a3 a. @; i. x+ f; B

    " }$ ^0 a5 D" Z. `0 @( Murl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'4 h, u2 B; U3 c
    15 P  m% X4 ~# Q! _
    2* V* Z+ z, Y1 d0 J
    3
    . G. H( G) F8 @7 o9 U# C: Q' J( U4' C- f: x, F- s) ^/ ?* f1 F" n
    请求头的作用就是伪装
    4 B5 x( }( k0 Y2 B' g
    * m1 d* b( g4 d8 [% K! `

    . @+ c  n# F$ E; Z5 wheaders = {' H6 s" V5 |) |2 V+ h
        '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'+ p3 w8 p( I# T- E
    }6 X- N1 f( ^  Q5 E
    1" T  Z- K8 v$ o+ m3 ^
    23 K; ^2 x# Y8 d0 d4 r0 S. V
    3
    6 G" G& o1 @6 L. D( A模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据5 b" k7 h( O( Q; i
    函数传参+ ?; q' ], v& r4 B0 I/ [  C

    ' [. B' p- y4 L. d- F2 D: {) n6 l' K( Y
    - W- X: `7 d0 L6 ?2 s
    response = requests.get(url=url, headers=headers)0 T. v6 O+ d* Z
    1
    * I8 j' L! d5 t# ~<> 对象 对象意味着你可以调用里面的方法或者属性
    & @- U4 K! j) u3 Z7 Q200 状态码 请求成功1 I' F: [3 v6 K+ e& J4 C3 Z
    获取数据 文本数据  y1 Z$ n8 I2 M: u1 b" Q3 L( ~2 p
    自动识别编码
    3 F  v0 z: w! C3 w6 @4 P3 b1 C8 n7 I+ T- v: q/ u

    " R: g* N- C9 \response.encoding = response.apparent_encoding
    8 [$ K% a% q: ~7 ]+ R7 phtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    , m- G# M- u1 V7 d7 ?. A  T1
    8 F6 r1 L& [% E2
    4 I9 X3 {" F' x1 R$ Econtent_str = ‘\n’.join(html_data)
    5 i0 V0 j1 s% @9 W" r. ]0 \* k# f- b; E$ M  R5 f- L4 O9 J
    ) d0 J0 V1 A8 V. J. Q/ ^0 s1 Z
    要列表转成字符串 ‘’.join()
    - b! e8 v  Q4 g5 J9 Kfor 遍历9 g  l5 c2 c* @& c
    保存数据 保存字符串0 k! }$ \. b/ D
    for content in html_data:3 H* f9 J( b, h0 O
        # mode 保存方式 w 写入会覆盖 a 追加写入
    8 J2 E) m2 d5 k$ X3 `2 C    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    7 I4 S) l3 E7 [# w        f.write(content)
    ' Z+ {, p/ Y% }        f.write('\n')
    4 g& M/ C& j( h' e# ^
    . Z3 f9 r. O, s# c% s2 t/ ]& I

    8 D3 j& K) x. |" ~* U" J4 i) D" g# print(content_str)
    9 Z9 a- _6 X2 C4 Z+ q; W) w1
    4 c! x- \* @  p5 z' e3 [0 d6 Z0 T2, l/ `* V$ U" u+ X, o5 v+ t
    3
    : z% `. E1 V3 M* P- f+ p4% T6 v9 r& r6 T0 _$ \0 @
    51 F& {# @) @8 H" d8 z# N$ X% H
    6' W7 Q( k, d- o
    7. u% W. J- D7 _
    爬取结果; ^; C5 _# f5 V. c$ t8 Q# k
    ) U1 M! [0 c* z: I
    & Q: C* W$ t0 I0 m+ ~) [# h9 p

    " \3 ?; E2 K2 Y/ G1 y& o
    & }9 U2 @) ^* {- n- O; ?9 L
    然后我们再来实现制作词云图部分
    % x+ D. t% t; y! I) Q4 t" F4 Z' k3 {# f; f& W1 j: }. P) G

    1 _3 F, x% f: R+ r# D7 L- ?: G3 B首先要安装这两个模块
    1 J7 R5 f; o* n- X
    : `+ f' Z. x$ f' P1 _: W: i- _

    6 j' ]: ]; l/ n5 x" D7 Kimport jieba
    - Z2 C; B0 k5 a* U% f. b  L( p1 nimport wordcloud1 C& _0 C. i+ W6 v) p; G  g. P
    1
    5 v0 M$ w; a; w% o; K% s  a2% A0 Q* Z5 J+ b+ Z' N
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。/ b& z# i0 C) e+ s; h0 Y
    & C) l$ Y: R) M4 S
    ) O0 c) I$ F% c3 X
    f = open('弹幕.txt', mode='r', encoding='utf-8'); j/ t$ P* Z4 E/ f# T& J0 w% }% |
    text = f.read()
    + q, n3 e" s0 k& ?& L$ Ttxt_list = jieba.lcut(text)
    " r& I/ V2 M9 b! l7 L: F8 g* z3 c# print(txt_list)
    3 B, F9 E  l, K8 R- s1/ g" {( Y" M! Q: D8 \" G% t- k8 U8 ]
    2
    9 f4 Y& T$ ^/ f" M3% A0 ~+ S- n. E9 ?& i
    4
    ) }, n2 F! W3 k# a# I& X) L; S& o/ f列表整合成一个字符串
    0 e* o, a0 ]+ y9 k( b  [7 a8 B4 j" ?6 t7 i! q- q5 `4 B4 @; u& Y

    ) m4 t1 S4 I& ~, K  {/ Rstring = ' '.join(txt_list)
    8 h+ N4 E0 V6 X5 n! ^# H3 N4 f$ Uprint(string)
      z0 t* ]' Z( d/ H7 W- C3 r& cprint('---'*50)! R; T( S+ o6 b+ g$ {
    print(str(txt_list))4 a* y' b1 p- j0 L7 o
    1
    ' u- `0 U0 v; h: Y" Q2
    " h) ]/ N' b3 O3 R) I. N5 P% P& O37 t' |* D6 _  V0 L  y
    41 S5 d2 O& U) ^2 N3 V! G
    词云图设置7 ^3 D8 R7 X9 ?
    3 q6 s( \" O6 \7 i
    3 U' K" }$ v( t) X0 ?1 V% {
    wc = wordcloud.WordCloud(7 f( u1 v9 g/ G/ l
            width=1000,         # 图片的宽
    # K/ F9 ?/ k' p8 e* f        height=700,         # 图片的高9 f; S- j1 \' `" z
            background_color='white',   # 图片背景颜色6 ^2 U4 N# L/ D. s! @) k( |
            font_path='msyh.ttc',    # 词云字体, f& S& ]7 P- J0 `6 a6 a
            # mask=py,     # 所使用的词云图片
    . m5 {9 G& [- K9 i6 B        scale=15,+ A0 t3 |0 T, N6 t" M1 v: M
            # stopwords={words},         # 停用词
    ( a6 c; }& }5 S! h1 I) s        # contour_width=5,
    8 p9 D: y  M( j, l- r' w        # contour_color='red'  # 轮廓颜色
    0 _8 O. m0 R$ ?, I: ~8 w)
    4 t. h' C8 Q2 G1 g3 Y1
    1 H7 O4 X9 F7 s( _' z23 z) g$ E4 J! e% n+ D' s. p
    3
    4 b# X( i$ ?- ]# L4, n2 Y! A# C, P' N  \- f
    51 y4 y, {5 Y1 |9 R. j' |
    6
    6 @! C/ Q7 z. D( B7
    ' @, E$ f- E8 h- ^0 H  o3 @! M( l8
    * z" v* u: F9 L  {9
    8 B% |* {) s$ q4 @0 L10! v3 T3 ]" N7 I( j
    11
    ) f/ A( h0 G3 ]给词云输入文字
    * a) q1 Z. ~9 H6 E( f
    - s6 s# i( [6 f; W. e$ H+ @5 z2 t

    7 k! S3 y( y# P9 C( F+ \* a9 w' x4 vwc.generate(string)3 v8 ?8 n4 m7 p; M9 h
    17 d$ s- v4 `# y* x6 e5 ?
    词云图保存图片地址4 X+ Z2 L$ [0 @+ \, e3 r" s$ ~

    " J) P+ V) u; A, n3 N9 B: |
    - m, P5 d- n$ Q* U9 |
    wc.to_file('output1.png')
    : x- `8 H) }" r' x4 I4 _- _: f1" E% h. g8 K" M' Y3 N/ X
    词云图的过程中有点慢,大家不要心急" j% H/ |& @4 k0 O0 q* E
    / y3 v1 c2 c+ w8 |# w: ^
    . c! c9 _% G2 D8 W9 V6 X
    这是最后的结果
      A5 I7 b/ @# h) ?# b* t
    & S$ G' Y/ T1 M& R/ Y; t$ n

    : j6 U3 P. f- Q- o没有加停用词,所以一些无用的词比较多
    5 T# v! d3 g' j5 H2 ?: y$ N. E; c' m- J6 ^& K9 l+ m& a( w

    5 \# S0 R" n5 s, i% c3 Hstopwords={'了', '啊'}
    3 ]8 b! e% A# d3 l8 q11 h0 T, A3 r* T" W
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    3 }5 f+ [. \7 {$ e我们再来看下8 y' O9 {2 }, s- k
    1 W! r$ q) D( M1 O4 x# p' M! g, ^

    9 P6 A! c/ H% ?3 v& _不知名网友:666666 牛批 老哥我要学!!!
      h" c9 P$ g( B/ n
    7 O: k3 d2 q5 V

    , x. b/ Y( c9 g7 d5 e3 J1 j& G: t
    % g' H6 ?. [3 D- k% d

    & |! G0 \5 N9 C( s+ V' L4 ?————————————————
    . `. M5 }: T; W+ q版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    , ]& @1 e1 _: Y/ U* N) q原文链接:https://blog.csdn.net/ooowwq/article/details/1192119075 z0 L8 Q" d* K; q6 i2 V
    $ o- ^; T- V: w! z

    ' W8 q3 e: _  O% j( u
    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-9-23 19:25 , Processed in 1.125273 second(s), 50 queries .

    回顶部