QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3105|回复: 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

    - }5 M5 U, t$ q, P用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    2 Z! @3 T( [7 m1 E: N5 j: A今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!/ V% s  V  p$ C3 u( P+ Z3 G
    康康大家都怎么说!& F/ y# G* I! g, I; f. k
    7 v# |. S" O0 g8 I1 {
    ) Z7 x7 y, y7 N6 K( r
    9 q4 @3 {8 L% a$ I1 G, d: x& o
    * w, n  g# D: K2 x: X
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。) _3 `* F9 i, y5 C6 x
    6 ^3 G( g1 g' M: J+ D/ O
    4 k- U1 f+ c0 R, ?
    如何安装模块:
    0 b& {, @- Q$ B8 c1 q2 r  b; c
    * F9 m, B. k5 s  s8 }! F& X/ S
    - f7 _+ b: G% w* u: p
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车' [% [' L; o! ]! S5 ]
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    8 n- x: `; x3 R如果模块安装失败了,可能是这些问题:: ?1 d; o* y, k4 o# d. q

    % i/ K8 b. l2 Y' _6 t1 [
    3 o: n5 m4 f% I7 i
    提示:pip 不是内部命令2 |& B- D. u4 J' o* K
    你python环境变量可能没有设置好
    * _" J, Q; H' S$ q2 @) v: ?有安装进度条显示,但是安装到一半出现报错了- @1 t/ R! ^# X1 p8 b0 n) x5 D9 x
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB$ N$ |' V" _- r  o; [  x5 `
    read time out 网络连接超时 你可以切换为国内的镜像源
    ) v" c0 |1 w; p, k明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块! H. ?$ K$ R3 ~: K1 y# P
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    : a' n( N5 A, }& S0 w3 ^. e2 }可能安装了多个python版本% P) W+ a& U; ?( s! z5 y# G
    安装一个版本即可( c9 G0 J: @3 V( {. I3 p. m
    Python做爬虫到底可以做些什么呢?3 i$ v3 _, e; u9 s3 q$ r9 H& d
      @; ~6 M/ B/ H

    / Z) F- C. v1 }4 t3 w4 |$ x. E常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    / t* s6 ~) g' x0 L  ?0 n7 c* c; r12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量/ f! ^% |2 A! Y, h* k* @' |! Q
    可以刷课 可以刷网课 自动 还能自动批量注册账号3 I: l% c. ?. D$ C; U  z
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …: n3 f1 i% ]- {1 y
    普通B站视频可以爬 番剧是需要会员的+ I" N+ C1 Y  S  w9 w4 Y6 @+ `9 A

    7 c4 J9 m, }" i- v' i
    ' P# j2 {& u" s& p; G
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)& c% o, }& L9 s9 s

    : R4 i. @6 G8 ?  [$ b
    ) f) o% T: A# e1 p3 }  {
    1. 确定目标需求 (弹幕数据 那个视频弹幕)
    5 `3 m& V, }4 i  L7 H2 A    确定了
    9 w$ W! N+ y7 |' Q0 a9 l; v2. 找数据 (数据的来源分析)
    ! E/ }# w7 v7 w4 z    简简单单 找到了
    . @4 u. ?' z- ~3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
      c# H9 B; b8 U9 c    请求方式: get / post5 r5 q/ K0 E' ?; M4 P/ R  q
        请求头:
    9 H3 b, u3 h: d$ j" R    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196( c2 B& Y0 I3 H" y. V9 q8 }
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)/ m0 J& p  i, u  Z! {# t
    4. 获取数据 7 g, r0 s6 B  l, O7 x
        文本数据 response.text 获取网页源代码- [8 q7 |$ D- Q  ]
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    % S2 M7 N, u- G+ m7 K4 x    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 ' Z4 j0 ?' ]# c& S
    5. 解析数据9 m. u0 b( S& m  Q. r, A
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 1 l' i, Q/ N6 C0 ^
    6. 保存数据
    9 Q1 s* c7 O9 ]' y, Z' ?8 S1
    5 J; @. b8 \7 u2& X6 d4 \7 B- s" k2 v( I
    3
    2 m7 v' l, J+ w% v' F4& ~8 _; @- f5 j8 ~4 _( g% U
    5
    5 R/ v9 i' X! W1 J; e# G5 `66 U5 F; w  c/ l% f% s3 B4 i7 r
    7
    , f, }3 c9 T1 T5 ~% k) f86 m- f0 W4 J, h1 m0 J
    99 h8 O3 D1 d6 [
    10
    0 h' ?. e$ z4 ?7 Y5 f+ a, v11
    6 m3 r$ e8 D  t/ I3 |12
    1 H$ h! |  A" {$ t8 \# _3 a13% d) p  f( U, o" ~# E: A- Z
    14& [" p6 s  A' ?, y, S. a) M
    15
    0 |# Q8 X0 i: r# _8 \16
    ) w5 F% m9 n3 M3 gpython除了做爬虫数据采集,还可以做什么?: G* ]+ y5 ^, j
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    # c" O1 G$ K5 ?; s" P2 t9 D, j% r
    ! Y( D3 y. J' u# X0 e6 O- z) o: ]
    8 p3 |5 p! S; m; e/ z
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K2 X+ x/ H6 I0 y  H8 }; K( Z
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    4 |# ~& C8 n0 p- a1 P* z我可以做到这样么?
    / v/ C2 ~% W7 g0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;! K+ \' N- i" b2 ^9 C6 }$ q! G
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    ( m* ^  ]) M1 s0 T! `# u) H8 j. N
    " \* x" w$ U8 I$ e5 g( v

    1 ~3 {0 R: p8 L& e) }0 K6 H爬虫开发(脚本)(就业/外包) 可见即可爬% x/ H- ?8 g( J8 \/ _
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    , V+ w% p- H, a1 ]很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    , r2 I' q: q( E& }; w之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!- O  D, E( C4 N
    0 A- N% A! T+ ?  Y# }
    1 _, z5 P9 A  p7 ]6 i
    数据分析(就业/外包)
    5 \, f+ R/ ]! f/ G3 M( q5 [; A4 T5 ?, m( T
    & g' R# @- K( ~. Y% t% }
    自动化(脚本); N% V' m. n' u

    1 E  t" x: u2 Z! A6 Y. ]$ `
      E9 |) s# _  w% I
    游戏开发/辅助(脚本)  d: R" h9 W1 P3 X  I
    9 w# e. A; H( O8 ^
    ! q1 q5 a( N* W
    人工智能(研究生以上学历 要求很高)6 }5 G1 J! W" v7 R- ~& P

    ) J7 c9 \+ G$ _# O/ b; g  R3 Y+ T; h

    ' D& P$ [4 E% E! t等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    2 Z' G6 J7 n/ Y  J; m/ D- |: e, k9 D7 e* V+ m

    1 L' ?) H9 c- c5 R, e: o' a我们开始正题吧  A2 ?4 ~7 O6 ?5 g* N( `5 \
    . c" N, g" q. A# h- q
    , P9 z: e7 M8 U5 ~3 `
    爬虫部分:  p& r9 B2 k7 K0 w0 d6 V
    发送请求 第三方模块 需要pip install requests' I: c/ \" ?" g# w  h
    # m4 _7 v7 a" T2 I( z4 @

    ; e' t5 R* v0 c  M  Cimport requests3 J( t8 {" G# s9 d( |
    import re  # 内置模块7 u7 x- P4 ~1 Z* v

    6 f: A' [, B: O7 c' |& Q

    - A1 P& [6 V( i  Nurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'+ Z& |  t+ Q- O4 y8 X& E5 M# R. n
    18 d* e) r) ?- v- |+ X! n, v
    28 p  i# r$ d( c0 h
    3" ~" m" @. E7 ~5 p4 c7 ]. V8 x
    4
    5 ]# _; X. |1 x5 `请求头的作用就是伪装
    % J6 I1 p' t+ f0 T  K2 e7 _# t  @. L$ P3 g; A0 L8 U

    # }+ v, P' g! Fheaders = {
    & ?$ h- R7 K# L+ y" C    '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'' k3 H! ^" z# v+ Y8 j7 r7 b6 G
    }
    % [( x! _5 f( I2 R1: u' n1 u; _% ^  P0 E
    2+ k$ ^7 s# x4 G! a6 _7 Z
    3
    1 {" r) [( n6 e/ M模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据7 F6 A) i6 }; ?8 p
    函数传参
    $ a# j& N0 T4 R, \0 G2 l2 }% ~
    ; H9 y9 P1 |8 o  [8 L

    - z$ @0 R5 R4 P1 z, R7 jresponse = requests.get(url=url, headers=headers)
    : Y2 Y5 W( \( f: U5 y4 I1/ P6 G# k* l. M5 i7 i; h( S' [
    <> 对象 对象意味着你可以调用里面的方法或者属性! X: e0 n8 ]* V" G# O. a" ?% w
    200 状态码 请求成功
    * |4 p0 Q4 s% x! l1 ?获取数据 文本数据4 |$ s9 b8 z/ o+ x1 ^
    自动识别编码% {* U5 ~& o! D0 I7 U1 @
    7 M& G# u: m0 y# A

    ) B5 p  ^( }) Presponse.encoding = response.apparent_encoding
      j6 r6 ?. E; }% b$ {& R  whtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)8 o4 N; ?0 I" n% `* h! f
    1: e) i0 d- K% L5 [8 M: T/ A' }
    2
    # k) a2 q' P1 f7 B( Acontent_str = ‘\n’.join(html_data)' B: i# Y5 \# r: b6 x

    9 f: e. c* T. f. k6 O  N: U

      m! X9 k, [$ H" l. ^要列表转成字符串 ‘’.join()
    / I1 P% k1 Q5 Cfor 遍历
    & q! H4 ]5 L$ J' X8 N# f1 t保存数据 保存字符串
    # |* F2 b3 n* f7 B- |! Wfor content in html_data:' N' k$ e2 g, {# Y$ Y) z! w0 {9 r
        # mode 保存方式 w 写入会覆盖 a 追加写入
    ; E( X) B: B' T8 q9 w    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:. v& E! J" A% l$ c, R1 }1 D
            f.write(content)
    7 \% ]- R$ U( u+ b6 f5 r        f.write('\n')
    ) x' _0 L' s! R4 F. b; h
    4 ]) b. L8 I( l' A+ y

    % e+ |1 F2 I& p, d, I# print(content_str)& D; e! [7 ^/ b. `4 H/ Q" I2 Y: D
    1& G% _: P0 `8 ^, x( L+ O4 A
    2
    . _& x* @) M. j4 d# v2 ~3
    / c; U5 m1 r! d- x* L' d" n# q' S4
    ( [3 }$ Z! U; q" x0 `; c* J5
    - [3 z. L) e9 t$ y2 ~) \5 U( F# d60 ]: J- P2 g& S4 Q+ a+ W1 R& ?
    7) v1 t: i( y) s: [" Z6 a
    爬取结果! L, \, O- H% z/ {; g* p
    0 `" o" }7 C6 P# m, x

    1 R3 Y) z0 i% s) \# f0 {& ?3 N
    3 {7 G% V5 {$ U5 O

    0 L; X( z% C1 d) D# t$ b然后我们再来实现制作词云图部分
    7 D) i; B: G+ x* w* b2 |& n5 y' ?: }; |+ V: T, m; ?

    $ n  U  F; W0 p# `' R9 v7 r$ b首先要安装这两个模块: N$ ]" g% E7 _3 N! d
    / ~* R* _6 O& [  m( y" ?" a
    $ u# x; [9 E1 U( V
    import jieba
    9 T; D1 l9 y! @7 o4 N& Ximport wordcloud
    % N/ r% T$ p0 O/ \1 E. t1
    % O2 H8 t$ `5 Y  W2
    : E# g2 W6 O1 j8 q. k+ ]一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    1 S8 c8 I6 I* K. g* T
    . g6 \" F* y! Q$ m( C1 L/ B+ n

    1 X: T3 f4 a4 ], p" if = open('弹幕.txt', mode='r', encoding='utf-8')5 i- g& F7 a' R' J, h! r, J
    text = f.read()4 W2 c2 m: T4 O; Z; r
    txt_list = jieba.lcut(text)
    9 k! z4 r. r, @0 N7 l9 U# print(txt_list), t! U$ \7 J" H
    1
    3 k; n; b1 b' T% r" W. e2
    5 N% D* @6 @( y" g, H( J3
    % |8 ~# K; [5 T4
    % P$ u4 A# e8 d4 z" ^列表整合成一个字符串# e' d) q$ J3 L* ?5 h
    * x5 }1 Y/ U0 `/ Q- s9 r) X
    3 [0 B4 T- o7 Q6 a  Q* x, |+ x
    string = ' '.join(txt_list)7 ^/ ]/ n4 s- f4 ]* P
    print(string)
    & E6 p$ `0 k3 `3 B4 Q8 R6 j4 y0 P2 kprint('---'*50)8 A2 L2 Y( v7 r0 G; C& C0 Y
    print(str(txt_list))
    ; T* l. [8 u) K: V. u+ [4 q) W* f1: Z0 T, L1 C4 z, x: K7 `
    2
    - U+ S5 L. j6 O# L6 b, H  v3
    ( P# c7 ^7 ^* ]1 x4, x* M# a" @. ^; t; q  I1 H* E
    词云图设置9 Q; @' C0 @1 i( Y) T+ o

      o0 u( q+ Y9 Z5 a: ~& U  }4 e  ]
    7 N( L, w9 U' b* h( G
    wc = wordcloud.WordCloud(
    1 z! g4 h8 F& X2 H3 s        width=1000,         # 图片的宽0 X  H9 v9 P+ n, I0 y
            height=700,         # 图片的高7 D1 s3 D+ v* F) [/ Z/ t$ z
            background_color='white',   # 图片背景颜色
    ' U! ?) U8 g4 q9 I8 P- i, h/ I/ O        font_path='msyh.ttc',    # 词云字体. u- }  S# m& x  h/ g* U; i
            # mask=py,     # 所使用的词云图片
    9 K* @! a6 q$ B8 e/ J/ ~        scale=15,
    . W3 n- |" g4 N. u  f, Y( I7 k( G* m        # stopwords={words},         # 停用词
      M& k8 A" d0 G3 }# U& k4 u        # contour_width=5,, ]. i, d5 W, K& N
            # contour_color='red'  # 轮廓颜色
    + @+ M# G) z6 a7 t, V% L6 j)1 p  E+ {8 {+ P0 ~1 Q
    16 J; \: c6 s! L% B' [
    2
    0 i. m+ i2 t1 D9 Z: ]* v, `36 t# K- p; f- L& M% @
    4
    9 X' m- M% }+ t% A, d/ {50 K( M  t3 c$ I5 z5 l/ |
    6( V9 E. N  O& I) a# L: P
    7( }7 p9 x! c/ a" k# L" W$ G* s
    8
      U$ [! R# W- ?, u& T9
    ) ~! k9 \2 F1 O  c10  @8 L& z% C6 z7 y
    11/ i% t- Y8 L& z, x7 A% Z
    给词云输入文字
    / L' @3 W/ f0 C0 A8 r
    . n7 k- t5 y1 V% x# r" f/ ^

    ! h% O6 @! d% Lwc.generate(string)! V; W+ D3 g2 K. j- x* P6 c1 J
    1  h  ?; w3 z- t8 \
    词云图保存图片地址7 y2 {1 U& l1 E. B' }) L; p5 g) w7 G
    ! l! f7 k4 F7 f+ P5 g% _

    - X2 j- X6 `. @" e. `; W% `wc.to_file('output1.png')
    % B4 Q7 k1 e; Z+ U5 p/ L5 F1
    , S* \5 s7 m- J$ q词云图的过程中有点慢,大家不要心急1 K" \5 J0 ]  `) D
    2 a, d; m( K& D8 V6 @2 Y. Y( r+ B9 j

    9 X  @4 p( h* \' L) m9 x这是最后的结果
    8 }# J. \# K& N# d+ x0 d3 k" p
    : s2 |* \& `2 H/ F8 `& N

    ( m" }/ P8 R6 `& X6 B) @8 ~8 J没有加停用词,所以一些无用的词比较多
    8 K  O5 G. h# F& _6 r
    + x, K- t5 Z5 `$ ^8 i
    + R. u( E5 E7 U; @% X
    stopwords={'了', '啊'}
    8 ~+ R( y0 i* y9 A; W; h0 O: `1
    & f1 @' a" F3 I0 v把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    & @7 Y1 D2 F- G# l1 G2 @我们再来看下
    9 G2 b$ n, k# H1 e" \' c8 d
    ! R9 a" r* j& _! B( X* y
    6 [- z" e5 t& |2 |; S5 m0 I, g; C
    不知名网友:666666 牛批 老哥我要学!!!
    ( S( J- c) K, I8 v" G6 T3 X: M% ^0 {! T  r! Y7 C  }  c

    0 a) N# `6 s& w' }: v$ r. T4 q! U* w  J: J0 L( b" ?: B& f
    4 ?+ Y) [5 s( D5 w2 D+ d7 k# K
    ————————————————4 t: F: Z# f4 C/ ?' C8 c; E
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 B9 i) H, v# ], }6 {* {6 k
    原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    4 {2 S+ ?; z' N3 `' L
    # `# z9 V/ o4 t. q* f! X& A& s5 u: y
    8 I! n; F, ~. X! M
    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-17 01:57 , Processed in 0.423918 second(s), 50 queries .

    回顶部