QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3201|回复: 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
    " X( p' [1 ?0 U" `7 ^
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    $ U: n- O- V% k" T$ h" Q. W今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    9 E+ z) m; H) n2 o6 q康康大家都怎么说!% f' K) b: J% a* D( k
    9 r5 g( v! P: l; l

    8 h2 [! c; q( H( A* V
    ' Y' J% R5 h! I! n# h
    : v% ]3 K2 G' ^5 F3 ?
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。) Q+ o- V( {9 I" x8 `

    ! W- _! y2 o5 r
    7 E( q( F1 {4 G5 S0 R
    如何安装模块:
    + N% ]3 x: O  ~5 @; ~4 V
    0 C# v$ F# ~" l  o6 F
    4 i8 s0 W" H1 O$ b
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    0 x* M' ~% j, U  epycharm里面安装 terminal 输入安装命令: pip install 模块名 回车, v. H% H1 c; A7 A
    如果模块安装失败了,可能是这些问题:$ H) C7 p' V4 q$ T
    7 }& w0 l. s7 h3 C. P$ {; E9 _
    2 d* F! f+ \% k( v+ O- F
    提示:pip 不是内部命令6 |, g* k* b, i1 j* D5 H% R
    你python环境变量可能没有设置好
    , h) f  K2 D6 r: u  w9 X' W有安装进度条显示,但是安装到一半出现报错了" t/ i  C( U1 [; \! v( q
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    . F, u7 R; [& s* ^4 r+ ^4 pread time out 网络连接超时 你可以切换为国内的镜像源
    6 s; T  z; l+ X( e明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块, J2 t! B5 w: b
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下4 ?  q6 I& ^7 a9 Q( h3 W( a
    可能安装了多个python版本) _" ~3 k# \$ }" f6 Z8 g+ Y; n8 C$ M
    安装一个版本即可9 s) \' f) s7 i/ \  ~: i
    Python做爬虫到底可以做些什么呢?
    ; R# f: o7 M! Q
    1 v2 z' v3 j, U+ q+ F- O; @
    3 }) w. W  A' [- R! \
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    4 q8 S" b( Z$ a1 O12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    7 {1 l1 U" V; A可以刷课 可以刷网课 自动 还能自动批量注册账号
    , Y; ~: f; f, H+ @6 @模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …9 Q+ d3 l4 s* Q( u6 \7 U: K5 v$ ^
    普通B站视频可以爬 番剧是需要会员的# G' o" W( ^8 f7 N, s0 k! b
    ! `9 p& F& ?! `& u! b
    - t8 M  k* N, r. A$ e3 o
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    ! C  h1 i' k6 \2 L" V* f
    ' O' _8 ]/ @, J+ O! M

    2 [; ?1 ~" v  u2 g4 t! g8 ^% R; L1. 确定目标需求 (弹幕数据 那个视频弹幕)- Z( b% t6 S5 u. e# T
        确定了: u, w1 Q  I/ I8 ^7 d" V
    2. 找数据 (数据的来源分析)
    $ d  G! n# b$ r$ p9 G& Z* r! J    简简单单 找到了7 }/ z3 ~' W3 }' x  w
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    + Y2 J+ }! _/ b* \+ N    请求方式: get / post9 S$ r% N: v$ p, F& {3 e
        请求头:
    - ]1 U: X9 i2 @) \! l( P$ g+ e    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    ' O" w4 l4 K" K0 I4 f    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站). N6 @5 F/ t2 c8 @$ x3 m
    4. 获取数据 * i- F& y6 T" s7 E
        文本数据 response.text 获取网页源代码% @- H8 P8 X) C1 P+ W8 _9 g% h
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    # T  k( N0 {. V5 N7 j    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    3 B( y# z0 y" Z% g3 W5. 解析数据
    2 c& Y- |* q& X    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    * Y  u" `* Q# f7 ?" W9 I6 S, G6. 保存数据
    . e! @; l, ]6 [' b9 s1 ]1' m4 x  I) i' g  o
    2
    3 g# H$ `  A- ~$ }31 I  g3 b& h  ?1 @
    41 _3 `- r9 N6 a1 Q& S
    5) \( o0 C4 ?7 }7 P9 X3 F" e
    6
    # B3 U. R! P7 V' m4 e* s  w1 C7
    3 V! b  o* }3 Q2 p8 Y5 Z( m8
    & Q9 b- a5 M0 V# S6 ~2 o9* v  p! q. B  f
    10
    2 b# l) ?0 ?% h  R11
      K% |  a, J% E7 Y' E12
    # K0 c: S, T& r; }6 \2 s& {# g0 x13
    % }- G  J5 G: t( Z$ x14
    7 ~5 c- J0 J7 E  j' I: M15, c- F( T; n2 _7 a
    167 W' q3 _1 {; I. J; ^7 q
    python除了做爬虫数据采集,还可以做什么?+ _$ y+ m. P4 j, V7 v. ]
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    & |8 ?/ j& D' [1 G) B" Z$ ?% u! v7 J/ L1 m
    8 B  u' L0 Z/ {7 X0 T
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K9 S: N2 z8 U6 J+ ^% j
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    + M  \# I/ M! Q1 L0 ]8 W我可以做到这样么?
    9 h( H* D; k) q# s' [5 s1 D5 E1 j, y3 P4 e0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    8 w+ p8 Q2 g% I. W$ o2 a( G# P如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;& X; b0 l3 l" C' w
    1 t' D: L/ `- s+ y* h
    . C' R5 X7 e: m7 t1 B3 ?
    爬虫开发(脚本)(就业/外包) 可见即可爬
      x( f* p' k0 M6 {虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!# G* p0 [" u  G4 b
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!1 R) g5 [2 n& N
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!: r8 g8 p7 J- F: d5 O7 b/ B: M

    ( t( _6 ^6 v5 D3 ~# Q% T# B' O" |
    , I5 K" [* h8 N( L+ f
    数据分析(就业/外包)
    + q/ j. }, W! c" ]/ t% U; ], n- f0 z2 z0 g' d: M; j

    " J0 t  `* h/ s# N1 ~, G自动化(脚本)6 G: e) A* Z! [& {% U$ z  I
    # @, h2 D9 O* e# w' F& w

    $ w% D& \8 Q% G游戏开发/辅助(脚本)- T4 C' `# R8 h; a" \- g

    $ ~6 j, Z# R3 k( R( ?! ~" B
    # \) ~1 b, y* s5 [
    人工智能(研究生以上学历 要求很高)4 B7 w; v; \( k6 B* c9 H
    ; ~+ t+ x+ _" ]9 T
    3 h! e& ?  R) l/ m. @( S1 K9 U
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。2 q& p: a1 y4 g1 B' Q0 x# Z
    ) e! A4 k2 ~& N) K# ?3 X
    5 m; Q, q0 D. W+ E5 o  x
    我们开始正题吧& n% Q$ c. }6 \) ~7 L1 I- V
    0 ~0 J/ b3 \: i) U0 J- i2 A
    3 Y, o4 s8 J' l
    爬虫部分:
      v7 n( [8 t+ k发送请求 第三方模块 需要pip install requests& `  V" x  `5 P* ?  q& O
    4 A! N/ H7 f1 i# e
    8 T$ f2 Z: m5 E9 l9 X; Z) p
    import requests
    # ?5 A8 e3 ?7 r8 o: ?7 [7 kimport re  # 内置模块
    4 {7 o" |8 M( b" _/ ]- ]. G
    1 U) q7 Z% a, E! k/ U

    ) E- s/ Z2 g/ kurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'. H; {3 o- M4 n6 `5 N0 O
    1
    , T" x5 g( n! T2 V2 J2- \1 C% ^2 n! W- V5 q( S" _4 r' a; I8 u
    3/ c) H3 I$ V9 c* l0 ^' D, f; b* Y
    4
    5 z4 N+ R) \* j( o$ [; o' M* ^% x0 w6 g请求头的作用就是伪装6 H  A7 ^  h) W. v) w5 ]! Y
    ( r! F6 x# K. \' T0 k# C
    4 r3 I7 O0 X! I% w" f  r+ H; ?
    headers = {
    2 @  v/ ~2 v# Y3 [    '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'
    $ y5 S! I5 M1 j$ Z$ O+ f6 Y: ?}
    ' U' k% N, I; f* B! {7 h1 a$ R1
    1 @! t. \  ^6 u- d9 [0 V2
    % r% K- R& W" \( Q& D3 z30 H+ e$ i, _$ a7 C! j* E& |5 p
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据5 H* o8 h/ |  `1 C
    函数传参( X5 w1 H4 X2 Q& c! ?% b

    # ^4 {2 z4 b# j0 R4 n3 o5 j

    : b% C3 @3 T" f% Q" vresponse = requests.get(url=url, headers=headers)
    0 F* Q. _! ^; h0 b+ t$ _1# |* [. B0 C; }6 J
    <> 对象 对象意味着你可以调用里面的方法或者属性
      J  M9 |8 f2 K0 Y  \200 状态码 请求成功
    / e: m, V' D1 y6 A" W获取数据 文本数据
    5 H) L* |& W- S. U$ h自动识别编码
    8 d& A; E3 B" G( j7 z6 _. p2 m: z' [$ E* Z3 y6 {

    , j: K/ c% E. Z5 n! Oresponse.encoding = response.apparent_encoding
    + B( R" u, t3 u  J. Shtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)- e7 Q0 M, e  M2 G' y- K7 l
    1# T9 D. B% \, H
    2' W1 w& t  i# M, z, J3 I6 z/ c
    content_str = ‘\n’.join(html_data)
    . X% @/ p  d; m% Z5 U: T7 [0 A+ \" C% J- d5 y
    6 o7 s, |, Z5 ]( e+ T7 J4 Y4 [
    要列表转成字符串 ‘’.join(), p5 U; _$ u7 c6 L$ d
    for 遍历5 ]3 O* {5 B1 }  F
    保存数据 保存字符串6 J0 r8 Z+ R7 s5 i  d. h
    for content in html_data:6 Y3 n" y! H7 }: b
        # mode 保存方式 w 写入会覆盖 a 追加写入
    ( ?3 W5 w- Q+ P, H6 l3 ]    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:  m, [7 B- h2 f/ T- H/ s+ D
            f.write(content)6 h0 F. h" p# G% K0 O
            f.write('\n')
    & P$ p2 g" j2 ^" b) Q" N, @7 g7 R; k1 \
    " M; |( H) U5 w7 q: U3 x
    3 ^, x+ G" s# o$ b' K
    # print(content_str)
    ! R1 M% B) `2 L8 Y1
    0 w! E7 r. {8 r2
    ! I% N9 ^# h3 p# {3
    + ^. r+ V. e- c: a4
    / y( j; v& G6 x2 }, H0 r- s+ z2 g5! {6 k: f3 e5 W# B
    6
    2 `/ Q: T$ C, }/ G# _8 ^7* Q" f  X5 Y2 \9 G, Y% r4 N8 @: ~& w
    爬取结果
    - d* Y4 \. ~3 d4 ?7 _9 i. B. V
    ( q# {3 \9 _" W3 c: r

    9 U1 c4 V$ \$ C; k  {
    1 \! o8 }$ l! Y4 |. @
    7 i- A' n9 i# V) E$ B) P
    然后我们再来实现制作词云图部分% \0 ~. R. ^* G" }2 J8 B. w
    4 n& B: n/ N  G5 j" B4 U

    4 a$ k% T/ g1 e首先要安装这两个模块( W2 f4 _( O7 G* S$ z" ]( k
    4 M  Y! U8 Z: J1 f

    ; g5 ?3 F# m6 Z9 Q  V5 d! }import jieba/ I) b7 s- c2 v0 @. r% f  {0 ^6 z
    import wordcloud
    0 ~) Q' u7 \8 ?& s1
    7 B/ y" r: R* r$ K. b2- e- w4 e  N6 G* j- U- x$ H( h
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    6 V+ N* x8 d% ^$ i" s( Y8 d
    ; t. u0 [" d7 z) R9 z( r  _% a$ v
    " \9 C$ {& j5 @  l' Q0 t6 V
    f = open('弹幕.txt', mode='r', encoding='utf-8')  E& d' M) `- w
    text = f.read()
    - i6 \8 n  ~# M# ?6 A; t3 o& htxt_list = jieba.lcut(text)# J' W1 n  |, r3 _
    # print(txt_list), H6 G3 g0 e( ~
    1; _6 G1 i# [: u: h; R0 t+ }5 R
    22 U+ x; z% @. e+ g5 J* ~) W
    3, ~1 p- }( L4 e4 c! k' k, `# m* p
    4- [4 n3 ?; w! c3 V/ s& f- `
    列表整合成一个字符串
    8 D4 j& |5 h, [& `4 A# }" ]) |$ D
    , U' c2 g6 `1 m  @1 a
    ! T; }& V: [6 @
    string = ' '.join(txt_list)5 R- A7 d+ C! `% F3 G  X
    print(string)
    : {; u; t: |4 U) M7 zprint('---'*50)
    , d& w6 c5 O9 ?+ X6 r% V! l  Vprint(str(txt_list))8 {" ]6 X3 n1 s' v& j( s5 v
    1
    % T1 ?$ v  x7 f  d" H0 _- y2
    ' o% v3 U4 d  a$ T3
    4 z% q/ f, u- Z4" \) g: K) a2 u* j+ @9 S  }. k. O
    词云图设置
    0 t2 v0 k; X4 s4 A2 P
    - h; }3 ^& J. r* W# l

    ( \& h8 o* w' Rwc = wordcloud.WordCloud($ ?  w( H; @6 t: @; u7 w
            width=1000,         # 图片的宽5 K6 m' _# S, R
            height=700,         # 图片的高
    # e; J2 G2 V4 [8 Q2 T* M9 z        background_color='white',   # 图片背景颜色2 n- o( ]- N' F0 D  j
            font_path='msyh.ttc',    # 词云字体
    ( C! t8 P# J+ w- z$ F, ]        # mask=py,     # 所使用的词云图片
    * Q: \* B, E! s- O        scale=15,
    ( b" E; V: P, u% t% R; J        # stopwords={words},         # 停用词
    1 y- W  h3 Q" m- h( a! I        # contour_width=5,6 Z. `5 K1 r, H% U! L" [1 F4 l
            # contour_color='red'  # 轮廓颜色
    ' J/ A0 G/ u! m0 d! G)
    , M; E1 @: [6 c  J9 j( W2 |1
    8 I' z% m/ W$ R) c  A2
    / ^2 A* a$ L" c+ O% s5 N3- m9 f% |; [% @+ o5 d5 }: f
    4
    # y6 [4 c3 o! t6 Z' n5
    ; N0 n$ t* U% \+ f+ ]# D68 f3 F  x$ ?5 f
    7/ c; q) V* c# G% w) v( V
    81 _. ~+ M/ B! O1 Q6 p3 ~+ M8 w
    9
    7 \! ~/ i1 I6 E0 _6 V) F10
      a  P. K  H% l+ n3 L8 U4 C9 ~# s! a11
    ; U7 K! F  _( A7 r& U  d给词云输入文字6 q# l  {9 g# F$ _9 J6 Q& K

    1 X* G' U. V& F; K& [* u! b

    & ?; d" y- C1 h4 N- Mwc.generate(string)
      f: O  W- ^3 U9 o( P' v; l; B12 M$ S5 B/ c" g) z
    词云图保存图片地址
    ! V  r+ p) a  L: r# x  i4 e- C4 N; J* L* O' q/ F9 B& Z0 ?

    : i9 p* s- W! N1 Y2 K2 I0 D  Qwc.to_file('output1.png')
    : s* ^1 u+ S- V( w1; Z2 _- G" Z- `7 G( F
    词云图的过程中有点慢,大家不要心急+ m; b& H7 J( L# v5 \% E4 W* m; B6 a

    ; `* ~& e5 H* U1 E' l
    + a" b( f( O& g- Y* [) K  z
    这是最后的结果
    $ I9 c6 b+ k6 G) V2 P5 Z6 @' a, b4 K: ]2 B  P
    7 ^( s2 R* V- Y
    没有加停用词,所以一些无用的词比较多
    ) u* c. A$ s& W3 E$ m  R) n' o1 ~+ y) y2 v" v

    % T" v+ m) @7 wstopwords={'了', '啊'}- {: m! W, g! S! E- p+ y
    1! K( r1 k+ X  h. w  k
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。' ~+ i' k8 M9 d) K0 Y
    我们再来看下
    $ C  d5 q9 v9 x5 t  Z7 R, {
    5 E! ]* i. a0 b+ V' ~

    0 S' ~7 y" P% u4 D: z不知名网友:666666 牛批 老哥我要学!!!4 \9 s9 q% R& w* z3 |) K
    2 N9 {+ ^& i) I5 A$ L& u8 g% ^! }

    * u0 z- p  F' Q
    # D7 D% x" j; ^! r9 v3 \
    , Q% N2 p; {8 P' w5 Z6 Q; n
    ————————————————/ j7 e2 d/ U2 u" z
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% X/ X( u) ], R9 ]% T" w) G
    原文链接:https://blog.csdn.net/ooowwq/article/details/1192119077 J6 p  X; b  J5 ~- e+ b: O3 j4 k

    4 Z  S! ~4 ~) e& u/ {5 Y
      X& e6 s: t; j
    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-10-29 01:32 , Processed in 1.296643 second(s), 51 queries .

    回顶部