QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3125|回复: 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
    ) T) ^+ z" [, W" g
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    2 o% f5 i" P& k% a: H今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    7 Q" F: b1 q$ f) Q5 R* n9 E康康大家都怎么说!" _8 U- q( [3 W4 I% O2 Y

    0 h& |2 G9 r+ V2 `# a. G! }) c

    ; B/ U2 v& B1 M3 L& ~( z; O& T' v9 `# y, z: d. L' v; `

    6 P5 [0 A) V, @8 d开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。3 `3 j$ o- |/ n0 B
    * w2 J7 r4 l6 n: z1 n4 C: b
    ( J+ N* t- D( H! H# d
    如何安装模块:
    7 E( n8 `  j/ b' [7 t. B* p3 F) m% b/ S# t/ A

    " d+ `: `, R; n  ^win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车. h; S0 e% b+ I* |: T3 q/ x
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车( [6 y, ^2 C7 P
    如果模块安装失败了,可能是这些问题:
    # l5 ^- k- u! l5 l' a2 i* f# j8 N# a$ v2 F- _" M( a1 I
    ( v" N: m& K! A' W% S+ [6 U2 t. ^
    提示:pip 不是内部命令
    7 l8 v+ L. Z9 ?8 `, @% {- w你python环境变量可能没有设置好
    # G  w6 P9 H  V$ T) S8 E" s1 W有安装进度条显示,但是安装到一半出现报错了5 ?7 b5 W6 U/ l& ~' w$ }0 h
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    ) v% X0 i) W5 ]/ C( s2 vread time out 网络连接超时 你可以切换为国内的镜像源8 c! b' ~. C2 I5 s" g
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块7 M6 ~9 t" Y4 P# e: k2 D& {# h
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    : L% w) Q  G: A; c+ [可能安装了多个python版本
    3 |0 Q, y5 q& x4 [安装一个版本即可
    9 Z% T. l& F+ w5 MPython做爬虫到底可以做些什么呢?4 N% g  ?( G- {6 e! }2 S( p
    7 V, d0 I1 _; \

    8 O/ |7 H$ @6 ^$ {1 M3 @- y常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    + |/ X. H. j/ n3 @% W: ]; K: a12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    % z  y( A/ ]- Z8 d' P5 \) r可以刷课 可以刷网课 自动 还能自动批量注册账号
      U2 s+ R& h# x0 t* Y! y$ E. U模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    ! m2 B/ m" a7 L* s! l' }1 x普通B站视频可以爬 番剧是需要会员的
    ! R- d4 |. h0 z8 L* S6 j$ n7 E4 G% E; m

    ; F2 W9 b) o. E1 N, o+ Y! x; u2 N1 ~爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)6 D$ e$ r6 q, j4 M( y6 F
    4 \# P. p3 E$ l; L4 [

    , ^# B+ e9 W9 i) ^" E9 P: `1. 确定目标需求 (弹幕数据 那个视频弹幕)* l9 d. k/ [9 q9 u: a! C1 P
        确定了
    4 Z) |. d/ P5 l1 H! J# m# T2. 找数据 (数据的来源分析)- O# X' [  P" x  J6 g! E
        简简单单 找到了
      r) Q- J9 m( n! s3 s3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)1 T" Y! c9 }. J. ~* `% z8 |
        请求方式: get / post: v5 o8 M0 ~* }
        请求头:
    * T! P0 @7 @/ I    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196" `$ i$ {8 ~9 e# C# F' {
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)4 j/ u# v0 t& E) m. o! M+ w, C
    4. 获取数据 . ^1 V# Z7 X" s! E
        文本数据 response.text 获取网页源代码2 f! T3 N% r; {' b
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多! y  ]! r8 g/ E5 r) M$ J% G6 F
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 * V# z; C7 F3 n0 O/ V
    5. 解析数据
    4 q7 L, u. d! |/ F    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    . F+ m  ~2 @4 d# P, I6. 保存数据
    2 Q; Q4 M( j. z1. [0 C" W) _$ H# f* A
    2. U$ a" p$ ]) n" K" Z, Q
    3/ U4 @2 E* @: d
    4
    ! @9 v$ l$ ^4 z7 u2 v6 V5# x7 Q6 \4 V1 ]0 n5 c$ K0 C
    6) F6 W0 V9 Z3 v9 U: Y( ]
    79 o$ J; ?0 j' f# p% ]
    8" s: B. N+ m  l
    9! L4 F& w: x7 o& |  K) {/ s
    10, p, C6 O, I7 b" ^- Z8 O. t, N7 N) T
    11" y0 `+ y7 ]& r; U# [
    12# Z; k3 \8 c0 t3 b. c8 U3 x3 l
    13
    " O4 c& g' h; i, D3 M144 c3 [: n9 M' q: t9 P
    15+ ?" ^' N  u( ~, _; W, ^7 [
    162 I) a2 @$ y' E& Y2 L' [
    python除了做爬虫数据采集,还可以做什么?
    1 l9 `8 |; M: P  r2 A! I; J兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    7 ]; i" d- T9 r0 U' {7 j. o( S. L- Q/ o

    & _7 E0 b% s' r$ H# b! s  A. a网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
      Y* r5 a3 h7 I比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    ' f& K+ B1 s) J! l" Y" u& @/ H. w) M我可以做到这样么?9 @$ b# E( t. M/ z; y
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    6 B+ X' h% o* S3 b如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;. I2 y) _/ n/ q
    , p1 |1 Z( p' N! l6 V

    3 G* S  S3 l2 s2 O  g爬虫开发(脚本)(就业/外包) 可见即可爬
    3 _, V! d5 ^% U- B虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!$ T: w% Q7 R3 C) t0 \4 D
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!1 n3 o( ^+ D7 j% r
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    - E8 f0 H% @! P% l4 \/ C; I
    . d5 y/ f6 \. N

    / z0 }7 h) G/ V( r* G# D3 g2 h数据分析(就业/外包)" l- ~2 M- U# a

    9 q' c% ~% L/ e6 d* S. l
    ; I6 e1 b/ u" q2 I6 {5 w) X
    自动化(脚本)0 @6 Q- s6 `: B4 ~0 ]

    4 @" G/ v" s2 ^, V2 Y
    # }* M  g. S" B  B; P
    游戏开发/辅助(脚本)
    8 S- `, S4 `6 M7 ~- Q* q  w: e9 K8 ?. F  r
    & `9 @# }* j9 l7 c6 r. d
    人工智能(研究生以上学历 要求很高)" a$ O) j( O+ D3 A

    6 L& `8 l( M3 m' ]+ `/ k2 P

    6 _1 Z9 H" S+ A4 ?' t等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    9 W$ }. s3 u2 ]
    " n. ]1 y) {$ O4 [: d
    , H. e0 r& p0 L+ R  Y1 e* m
    我们开始正题吧
    " p: Q  X' a1 w4 _; V3 T: C6 ~+ ^6 W/ ]; o+ |9 X; t

    ' R" [/ z9 O7 ^. L/ N) a爬虫部分:& U: c- S) @/ r. {
    发送请求 第三方模块 需要pip install requests2 I; U& Z7 C; P/ S: ~6 |/ Z" ?

    $ O* _& I2 x) b: P
    . y. P0 ~) S4 Z/ y& i' {
    import requests
    - o! B  Z: a/ Zimport re  # 内置模块
    4 W4 G9 R  @, i
    0 d& g+ m" ]3 C& w6 X
    7 m. f: H5 M. z4 B' u* {, q) H
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196', `* {- J; ~) j; L8 ^  ^; c
    1
    & [# m  B4 {. Q, |" g5 j1 x+ Y2
    ' B. W$ t; h" b$ m/ ]38 O* q% j6 a$ K$ R+ l5 J" F
    4) H9 p8 n- p6 r$ C; \0 v9 \6 C1 R
    请求头的作用就是伪装
    1 {6 ]0 _" y4 U/ i! X3 |) T4 k6 {9 Q# X# v" U$ w3 h4 d2 A

    ! c  ?1 p4 R  m# u" @8 w: ?headers = {% ?' O1 k% q" j
        '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'# L0 Y1 U2 R9 e, ?# Z2 Q
    }
    1 o% `, u& J' {* p0 }5 q: e1
    6 {5 I6 U* g6 W, A$ P2
    ' z$ X( }' C% O9 z* y1 q3$ Y, j! [/ S4 g8 ~4 w" n7 n
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    " c. c8 V# g8 U函数传参
    : @2 p. Z% m% K' z% b" x
    ) E0 `* f" @* I. h
    # m% ]9 U* U- j8 b8 y+ @
    response = requests.get(url=url, headers=headers)5 p& R* q3 G$ ?) Q5 @0 W$ i! R
    1
    ( B+ ~9 a* b( L<> 对象 对象意味着你可以调用里面的方法或者属性
    9 n1 n1 l: d% l3 D200 状态码 请求成功
    - t& T; I# Z: \+ [5 J) C% C获取数据 文本数据
    1 p, I9 F+ {) [3 A8 R3 r自动识别编码- J( J* d$ ^- h0 v$ e

    - h" A; d# r5 W

      w( B1 h) m, j' ^% ?! _" p. |response.encoding = response.apparent_encoding
    * k: X, O" o% a* ~% Bhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)3 E) m, }, r0 L
    1
    # L. R$ }+ K, \! q5 N: K2 y23 E# D0 t1 l: ^1 n( ~, ]" y/ @
    content_str = ‘\n’.join(html_data)
    . h* p, r3 X4 p% c' c0 F: n# Q8 f/ p& Q& j& x/ a
    , N( i& U" p0 P; O, B# ~6 n
    要列表转成字符串 ‘’.join()
    4 J- c! D/ V: m3 c4 O( Vfor 遍历- P, T! J0 W  Y  }- N" B. V3 K$ F
    保存数据 保存字符串
    * H0 O' P: p, F  z8 a! {) V3 mfor content in html_data:
    7 s+ t* f5 p/ w+ |, [    # mode 保存方式 w 写入会覆盖 a 追加写入
    9 [9 F' \, i3 a0 p$ I5 ^+ @1 ^    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:1 i7 Q5 i9 v6 |7 b. \" e
            f.write(content)+ @8 s+ J6 @! ?1 l
            f.write('\n')! M) O+ ^( B- t  g2 Q

    * w9 ?9 V# M" u- G# O6 w
    8 F0 L9 M9 a+ T" A4 Y# Y
    # print(content_str)
    . T7 q% y$ x5 {; Y) n0 u17 O& H9 ~* G- K! g6 {
    2
    ; N" T, U& T$ |8 J4 H; U3
    # j% e' n# {4 j1 ]' L9 u& u7 R4$ }5 T0 f& ]6 o
    5
    " l* p( x3 L, @% I' ]4 r. I6
    , ]& S, M; y1 Z4 m5 Z7
    4 e/ [- m- H. B; s" N爬取结果
    9 r3 _0 S" c6 a: p- C( p: A
    % Y" ^  _  A) k' q
    & J3 e. H. v' z. d) V. a) Q
    5 D4 W# v9 J& o( }
    : M) W* t& r; t. z- x
    然后我们再来实现制作词云图部分
    1 B2 Y4 Y# J6 V
    6 |' L, o' f9 X. h5 s7 T
    # [- l0 D5 N* ?
    首先要安装这两个模块& p" \5 L. m3 Y" f- `5 t
    " p4 m& a, P; c8 E5 ^$ \5 I8 K

    " o1 K- V: C* U5 i6 g: l, zimport jieba; X3 I' [8 v1 O. C9 a9 p
    import wordcloud0 c  j, u8 R: O) @  {
    1. v  Y+ n/ ~0 b; v1 g
    25 k) f0 H  r( e$ f- V
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    ) _) ~* j$ e7 q5 I$ W0 Y; N! @
    , x% Y" c. k6 R5 f9 {

    & M* A* k- o' M0 o$ R7 vf = open('弹幕.txt', mode='r', encoding='utf-8')
    ! C6 Y+ D( x6 xtext = f.read()2 Z' z- U% m! n
    txt_list = jieba.lcut(text)
    ; o  z) K" S1 A4 n3 K# print(txt_list)
    " d) J7 ~" {% o1. e6 N( j$ Z5 v% K0 u& o& q
    2
    5 u. [1 C, D0 s" x5 y) j, c3
    ; w8 V3 r1 h3 Q0 H: N  x4  z0 E) ^9 Q- l' g. f
    列表整合成一个字符串
    9 }! n' n/ S& h4 M1 b2 D7 T" N6 M9 b$ i9 b: O- {

    $ u) n- I1 _! i$ x9 wstring = ' '.join(txt_list): p1 y( M3 H4 ]
    print(string)9 f, Z- a. Q5 N5 I7 k5 m) l
    print('---'*50)$ f8 \9 v; G0 D
    print(str(txt_list))
    0 U- O3 ]4 y; I. W1 V  o1
    * |4 W) U$ [: o) k2' C  n0 O1 P0 b5 o, Z0 b8 G. U
    3  b- R& Q; d2 ^. x& n" x+ K
    4
    9 y3 G, F- m, A. e! v词云图设置
    & R* d7 h' I8 a: l% e1 ~; T( b6 g! W. s5 G5 I# ^# J- {2 @
    ' Z0 S, p7 ?* [6 c; f
    wc = wordcloud.WordCloud(
    # \+ x, A" w) C2 }" X        width=1000,         # 图片的宽
    - v5 w- T8 d& a9 k; [3 _        height=700,         # 图片的高
    ( H9 K: G3 N# h0 X! b        background_color='white',   # 图片背景颜色
    . I9 p) o2 J8 U- f" d3 W        font_path='msyh.ttc',    # 词云字体
    # j8 t# S9 |3 U7 t9 a& ]% |        # mask=py,     # 所使用的词云图片4 |( V. ?) ?9 D( V
            scale=15,' P7 \$ H8 H, i+ v& \
            # stopwords={words},         # 停用词
    7 a3 y8 R7 j- y  Y* m8 {8 M1 _6 x        # contour_width=5,
    " Y* n6 @: S$ o, A" \: D2 S        # contour_color='red'  # 轮廓颜色" v, u, B- h7 J8 R2 K! G" f
    )* t$ z% b  B/ `5 U$ @$ [
    1. W1 R  d, @1 R$ f6 w7 m" o! C" _) _
    2
    * B5 ~9 n" _: z/ i/ v) n" u32 N; I' [7 b5 U1 [1 w9 c
    45 w( u9 N- e- ?: l: Y3 L* C
    5
    / u, y7 Y! M- B' ~, d6
    2 }5 X1 Y! o6 p% }- V7
    2 d) I7 A5 S; O0 X  P8
    2 Y' C5 u$ j" ~1 V+ I( c# ?) a9$ N3 @+ v6 Y. \7 m
    10
    4 F( h: ^% ]& V( S4 n7 n0 p11
    + e  l& D; _3 a给词云输入文字
    ; t4 t. \/ W( S
    * g! \2 D( [: ^- z1 N

    . a; y8 H# ~$ K& vwc.generate(string)0 p8 J/ M$ C' e+ c( p6 z/ e- q! H3 x
    1$ G7 R' V, m& m* f
    词云图保存图片地址
    : P. H3 s  p  r9 @" o- ~" h3 R+ B
    ! Z% K& b4 k& I0 m/ Q6 i3 p7 O8 [
    9 e  S6 |' F9 {8 Y% a0 u$ S
    wc.to_file('output1.png')/ Z& j. n: k- z2 X; {9 S( W
    1
    + A) ~# S& }6 @9 h+ q, c' y" Z词云图的过程中有点慢,大家不要心急
    # i0 u5 E7 C9 n7 Q, r, r2 E; z6 c& B: D/ j" M9 x) M
    8 a, F) D' d4 }9 M# p: q+ d
    这是最后的结果
    5 ]% ^, {1 E" o: O( E. g0 ]  K. c5 y( q0 ^2 E1 |
    * o/ e9 \; Y6 N2 r! P+ j/ W) N
    没有加停用词,所以一些无用的词比较多
    . V1 X% {+ j  C7 p* W  x' h
    6 }- J* X5 \! ~3 H- v
    " A# x8 A0 C$ f0 \/ W. X$ ^& R9 v$ S" i
    stopwords={'了', '啊'}
    8 V8 B' c: ?2 d& W# ^1$ T; F' |2 A) ]; o8 y* A. E
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    0 {+ X! [0 n1 T0 P/ h6 D我们再来看下4 P5 ~# D5 K# W3 |4 Y% W) l

    8 b- W8 u, o  H. e0 h

    ) Z4 o4 c$ O) B+ W4 g: }4 Q; ?4 c不知名网友:666666 牛批 老哥我要学!!!. o5 {& i* E( ^

    8 ~( f) _! B; j. q* k
    , x4 ~! `( o) S4 S
    ( J2 P: K+ o7 X9 S6 J9 M* _; a
    4 @. l5 u! y8 B+ j8 K+ x" K
    ————————————————
    / e+ A4 q0 j" K; m% k版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - V: _. s" E& `/ o原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    % Q: b6 q! a6 k
    $ e* ~) z) k9 q" N9 `" z/ ^% d0 R! L. ], r& G- E4 a$ X/ a) C
    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-6-15 10:07 , Processed in 0.610477 second(s), 51 queries .

    回顶部