QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3169|回复: 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 r$ ^8 w" a# j4 u+ G) U  i
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!+ z9 d0 j3 q+ P, Y
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    ( W! Z/ c, e  q" `" ^" ^康康大家都怎么说!
    1 t2 A2 k$ g" N! U0 S3 u, v) z2 `, a  i+ M, N/ T: K
    ! {2 K5 j$ c' g/ {8 ^( z: k0 J  n

    ( H( R5 d6 k+ M6 _

    5 P% b2 L- T5 W) V开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    - c' J* u2 w" Y
    4 a) Z, }& E- ]% ^8 @3 ~( i6 t7 d+ D% p
    - D$ x, B. \5 s2 v, n, ]2 F
    如何安装模块:" [7 [- v2 C: o: u& s1 f9 M
    / y+ o8 j6 W1 \4 s3 w

    - W7 I; c9 C( L9 U+ V' c: `$ Qwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车8 z! ^: i5 G2 D) t9 J
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车/ X5 r2 F( c( R" ^! P& r( k+ n0 y
    如果模块安装失败了,可能是这些问题:
    : t1 k0 a' a7 l4 K) G  c0 |2 }  F. H
    8 ?) F* H( r( L+ ^: A
    ( p2 R; Q( }; L: M- j' y1 G/ s; e* k
    提示:pip 不是内部命令# \7 }* {, M( Y6 s5 }4 j2 X
    你python环境变量可能没有设置好
    9 @5 m+ k0 [5 `8 f7 P. D% U. H有安装进度条显示,但是安装到一半出现报错了
    ; b3 u# m% }8 }% Y' `! y因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB8 e9 X* w: E3 |- E" g6 {
    read time out 网络连接超时 你可以切换为国内的镜像源: r4 H- s* o$ w/ M9 h) s/ b
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块1 M& k$ Q: \) S2 Z+ }4 f$ I
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下: H7 H$ p' d: v6 |! N
    可能安装了多个python版本
    - U+ B. w2 _# E! ?安装一个版本即可) Q+ @- g4 i1 R
    Python做爬虫到底可以做些什么呢?0 X+ a- m  S1 e6 ]6 J7 v4 n

    4 ]. ?! B6 M8 m. c9 b$ R6 O3 h
    5 ?7 [8 d  X# D: o2 {+ F' V% W
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    ' R$ S, h: E  Z: u12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    . S% u( L9 b3 J0 w) w$ _可以刷课 可以刷网课 自动 还能自动批量注册账号8 e9 }! ]& N2 e+ ]
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    ( o& q* L  C, |普通B站视频可以爬 番剧是需要会员的
    % {$ ^8 Q) @3 P
    ; t6 z! u& i3 q; h! s5 E7 h
    / I* o/ k/ C( N2 i+ I- o& D
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)5 _. T8 O3 M& Z5 h8 _/ r2 k

    " p! P; D+ B: }/ n8 @  i9 X

    & w7 l9 z- B% G; p! i1. 确定目标需求 (弹幕数据 那个视频弹幕)
    5 S. d1 g8 _1 |  F+ S    确定了
    1 f5 L9 X: [; O9 ?! ^/ e! w2. 找数据 (数据的来源分析)
    1 k+ u  K. S. ~0 y    简简单单 找到了& f0 C- g, P1 m# m3 B# w, W
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    / G4 t" f7 z5 j% j: G' J    请求方式: get / post4 [5 {# b& }( U+ _6 r3 f' }
        请求头:
    4 b6 X) ^" a5 @7 f" w6 z    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196/ s/ `* p& Z% C  {1 a  Q4 m3 m4 w
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    1 k) S- d9 j; L( ?1 Y# E8 Z4. 获取数据 1 W0 B! E+ W- y( d8 U* W! A
        文本数据 response.text 获取网页源代码5 v9 a/ X2 H7 g
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    6 h) L7 k6 n0 O* ]. M7 P7 |2 h    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    5 `2 X5 C* P  B/ F8 [/ j5. 解析数据9 b1 _+ x. C1 V7 a
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    + Y& q* {$ H6 e' I6. 保存数据1 a& Y, q! @8 s& ^0 E
    14 k% [& ?- M5 x" r# V; h. T. Y
    2
    6 u, ^( a; t- V9 _  Q3
    : h- @3 c( [2 A% K* p4
    # J3 I8 |' O/ v" {7 g. H7 J, H5, W; N# W* g) Q7 n
    6
    5 K- k& F& b! A: n" ?& j7
    0 ~: f2 c! h; y- K8: l7 e+ R% K. w! ^$ @6 S
    9
    5 ]) s; @& u& d' S: [6 K" |5 @102 A) {- U) J/ g* K: k' g  G: m7 _
    11
    7 ^' u  j7 g0 i" H5 I4 D, t12
    0 n4 S! O7 {. n9 }13
    0 b/ j7 A4 d; n14' X7 Z( S4 V- W" j# }2 |
    158 f  u7 N' X7 f; k+ n! X$ I8 v
    16
    3 ?" L( v$ I7 i/ p6 Lpython除了做爬虫数据采集,还可以做什么?
    / }; [+ ^# |# W6 J5 I3 c兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
      X$ {1 ?( X( h" J: u/ `4 V/ G. f* T& a+ Y0 s! K/ P, r& {# X

    " |6 o, Q$ R+ c网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    0 F0 E" h$ F+ w* l( Y" r比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;: \+ t) F. T7 F* F0 I
    我可以做到这样么?# `: X4 U2 x, h& n1 K0 Z4 o' l8 _% y
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    3 w% j6 g! e0 y如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    8 c$ x3 E7 n0 Y/ g: o3 F2 @9 U. V$ r  n, a* X. q: `. B  O
    7 N) Q# i) H. q) b
    爬虫开发(脚本)(就业/外包) 可见即可爬
    + `% {! C: F# I: r0 L+ Y虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!" r) ?& e4 r9 @6 w# U- ~
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!- @8 m% e3 D, u8 L3 |8 }6 G; V
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    ! A8 S. ]0 l* y3 y# y0 T5 R6 t6 `8 {! C  {* x* Y

    2 {* y. _6 [7 R$ B" O7 d* o6 b数据分析(就业/外包)
    / C$ Y" G9 {6 X3 J) Y2 \
    + v9 E* ^. i% j$ o4 x5 w2 |

    ; H; `! {) q- |5 v自动化(脚本)
    6 K' R5 j; A2 i1 s) Y8 i% h9 e
    ) z* Y) I1 h& I/ w% t4 C1 c

    0 p3 @. m/ ~) G' ?, j游戏开发/辅助(脚本)
    6 K% U- j% d* k  J" x" o( q5 W0 i3 ~- W& R+ v! Q; Q
    1 e% o: z- J& g- H8 h/ z' k# d0 [
    人工智能(研究生以上学历 要求很高)
    ( w0 I( X& H/ v. s
    1 P& ]7 v% ^5 e/ [- S2 P
    7 r9 x+ F# l! O" l9 E+ v( T! ?& i% t; Q
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    8 k; q8 q0 R# {- ~; @* u1 D9 r. F- h

      \/ E  u% N$ ~; i7 X# g5 p* {' B我们开始正题吧2 [7 b& R' z% R7 V  d
    ( h% a( g, m: n5 O
    ) f8 C8 g8 J, H4 G3 d+ `
    爬虫部分:2 H( m# G( K2 C9 s- D
    发送请求 第三方模块 需要pip install requests4 A& \/ i, R8 F" u) [0 e: F' z

    $ a, n2 M+ ~! q% W  Q
    $ W+ q2 L4 T+ a8 I" q3 K  p+ c2 C
    import requests
    * E( U2 R% s9 iimport re  # 内置模块
    ( R$ Q0 a; x0 ]8 P  d$ }
    0 v1 e  m. A9 j& E+ ^# D
    ; ]: }  l3 r( \* K
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'2 J  V) J0 r0 s, r- M
    1- n, ^& `/ {3 o, z! L
    2' r# I; Y+ w3 o% w$ x
    33 h& {+ b! G  H5 Y7 ~2 `
    4
    0 t+ M) t; K8 ]* p请求头的作用就是伪装
    4 P( i7 X0 G# j/ y
    3 l3 {) z& |7 T
    / R" T. n" o; t
    headers = {& K- T! f7 _6 X& \# q; G: n# N9 Z
        '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'
    * G! {7 w  d9 G% I8 u}) A$ @4 s! p) v. [1 y+ `
    1
    ( \9 Y9 _, E) y0 A6 e5 I( r/ m! g2
    : ^6 l2 q8 l# u2 N4 H+ e3
    5 m5 b* G# D' a; x模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    " [& m& L. x& D( L- F' x函数传参/ j  r/ ~4 ^8 s* h. S
    ; k6 j, e( z: U. V
    % l! X5 q4 m' N, B/ L& A4 r
    response = requests.get(url=url, headers=headers)
    $ q5 d( L) ~  r+ I+ c1
    ! i2 U8 W2 z7 p( K% G" o1 `4 j7 ^<> 对象 对象意味着你可以调用里面的方法或者属性
    ! t+ p9 K) g: U2 @3 l+ j200 状态码 请求成功' _: X/ t3 D' G3 x" I
    获取数据 文本数据
    5 B# J. O$ o# C9 L- w& j自动识别编码
    3 d8 w# s$ L# N. H; f
    0 d! O5 K* @' O9 t6 K
    : ?( r8 \0 l2 |4 X
    response.encoding = response.apparent_encoding* U, `8 r( y0 c& G
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)5 |. b% L8 M$ f* Z+ o- \
    1
    / {; }1 E/ i5 W1 ?6 }2
    ! x9 }4 C) R7 {1 U- y& @% Zcontent_str = ‘\n’.join(html_data)9 O! X0 s9 m' J2 I
    . v! v3 ]$ _+ g

    * J7 q9 ]+ O& K. N8 ~9 r要列表转成字符串 ‘’.join()
    4 `4 k, K5 v8 Q! Q+ xfor 遍历4 A7 f. H7 G1 J! w! j" ]
    保存数据 保存字符串
    " |. l, U; g; N7 D( T! c2 Ofor content in html_data:0 S$ y% m8 R) |* e& s$ }, F
        # mode 保存方式 w 写入会覆盖 a 追加写入
      C: U1 i  M! ~7 A& y: _    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    $ t4 O% e$ v: k) f' f        f.write(content)& j4 m; A9 u1 l3 w# G* U
            f.write('\n')9 ~% ]; {. |  k+ k
    3 U! F) y( W4 H5 s

    # C! @: Y9 S7 I# print(content_str)6 g# A  ?6 Z* |$ q# t
    16 w" A: }% R6 V2 i, a4 z. T) [3 p
    2
    2 w3 k% g  O+ T) y; d3, _: q: F6 N% J+ J
    4
    - b8 @- J6 {+ S+ W4 A1 T& t, w& V55 @* G& M" `9 e; S% x
    6! \, C" q" {: G( b& P9 m6 n! h1 m* {
    7
    & v( H, K4 G; f. [& Q% S7 z爬取结果- |2 T8 z! T$ O9 A( R
    ; A2 r" B3 H' ?9 \$ p. T% M1 ~2 Y
    ' |# f$ M3 W4 z4 R  ?) w, u0 \; b- N1 D
    4 O: x9 N4 A9 p
    : m8 i. n# v4 ^) E; T1 o
    然后我们再来实现制作词云图部分
    3 \8 @2 C1 k9 O; T
    3 Z3 h6 W: D- l+ y# m/ `

    : ]; T% z! M0 ?; \7 g, t$ }首先要安装这两个模块
    ; P6 _! y) P- h; N- P$ F
    + u+ T  x8 ^6 Y) J. i7 ~

    ) _0 @/ P5 k1 P/ ^* Q( Bimport jieba6 h; y/ u, g1 Z
    import wordcloud( _, Q- [) U" N! Q, a
    14 ?/ X- \7 ?7 Y1 c! ]. X
    22 j: U, s5 a$ }- w  V& Z
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    * G3 k; r1 C3 k+ d% Y1 @$ p, R! l3 k5 S  j5 M
    : t1 [$ L4 h% ^# r% e2 i
    f = open('弹幕.txt', mode='r', encoding='utf-8')
    $ n3 J$ p) C* t5 @( K$ ], Dtext = f.read()
    5 P( L  m3 k& H8 @& ^txt_list = jieba.lcut(text): M3 F+ M; ~; Z9 r+ Q4 a& O' S. _
    # print(txt_list). w4 N+ K$ p- o8 p
    1% ^3 X* \0 T4 f+ P2 F
    2( O5 d3 Q( a8 J! L" }% U$ f
    32 u3 W3 \/ D- v* v5 X
    4- {4 E1 Q3 Y, r7 G
    列表整合成一个字符串1 _! u9 g# T5 a$ X6 }+ m

    ; Y! p3 ]4 m! V5 R" g' [; D
    . S& u5 s+ {, x3 b" x  h2 g4 [
    string = ' '.join(txt_list)3 {" m6 i) C  P6 M( m! m6 P
    print(string)
    1 r4 r  ~  O: y' d3 W. g4 V1 |print('---'*50)
    : @2 ?" O. n' O! h; Z. ^print(str(txt_list))1 c+ l7 _* j1 C
    1. p( _5 F* W% n: r. S# @
    2+ J, Z. k5 |5 n5 S. F. M( ?/ E
    34 x# y5 m& Z8 \3 d; ^: F
    4
    / E& N. |6 D9 t$ C2 x8 i4 Y词云图设置
    ; |5 U( c. Y$ h  ~. T; u, l( }) A' |7 N

    " K) I* V2 }( {5 pwc = wordcloud.WordCloud(& j4 I- D0 i- ]6 q9 z$ r
            width=1000,         # 图片的宽
    0 w! g. d0 R9 _: L8 K' v        height=700,         # 图片的高6 h- V1 f  Y1 {3 ]
            background_color='white',   # 图片背景颜色
    # J  j( p! I; c) M2 Y0 S: n        font_path='msyh.ttc',    # 词云字体
    / X9 X1 a2 e1 o" Z        # mask=py,     # 所使用的词云图片* J/ P0 ~8 j7 S* \9 z. q3 S
            scale=15,
    6 Y. U0 x+ `& @0 R) {; q, T" R        # stopwords={words},         # 停用词
    0 D( w, v9 c8 }; Q. R' Y        # contour_width=5,+ S  X% O. N3 P# H
            # contour_color='red'  # 轮廓颜色7 ^- Z- K# N9 s
    )+ I! l/ ?2 l" _6 M5 Z# ?5 p
    1
    ( s$ ]( o; _9 ]6 S1 C24 d: w& y6 l9 ^, h. K5 T1 m
    3% {) }1 H3 K1 e. c# J
    4+ ^: J* N  U( d
    5
    3 O* \6 r. W7 o* p3 ]9 p8 s  i& B60 G& |8 A4 Q6 s5 Y/ L, ~
    7
    ' v0 t+ y& m3 w! m! i0 P+ ~8: }# T: w2 ^9 p, B5 L! k' I  ?2 R
    99 E5 Y8 d+ [, |& E9 Q: |' m
    10
      h* ~$ o( }' d/ a11
    " K1 D" K) r: @! Z' d- u9 z给词云输入文字1 I1 q5 v+ @4 c, ^

    $ M# l5 w* l, _  T

      ]+ k- r# G) x. `* r4 r( kwc.generate(string)
    1 m! h. ^- |6 P1/ I# T* ]$ d( f+ w2 o
    词云图保存图片地址
    ; p- V0 f. O8 S1 D9 M8 `: p; @; M, N1 R% T4 s, i
    ; O, @, q  s$ f! N5 {0 V. }
    wc.to_file('output1.png')
    0 l! S$ L# d$ `) G- G1 Z1 h1
    5 |. ]3 [0 |' x) C; h0 v词云图的过程中有点慢,大家不要心急2 U2 c, S/ i- Z

    6 t$ T2 ], Q4 {& `$ Q7 _
    . k8 n+ o1 d4 s: z3 |# x0 r7 \
    这是最后的结果( |. V) L+ Q( ^' ]+ N

    . W3 q+ \/ B( Q9 n( a$ u! ]+ F8 a
    2 c; c4 B, ^. C
    没有加停用词,所以一些无用的词比较多
    # Y2 ~9 s' M9 K" V1 v3 P1 p0 O
    : m2 {0 c, Q+ K$ N
    : [2 T6 ]" g8 V
    stopwords={'了', '啊'}5 z3 \( ?; P, @6 S
    1
    " v* D0 @" O/ Y把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    % `- f9 {( l( D8 _我们再来看下( P) t8 l/ I1 y* g5 k6 X
    6 a/ ^3 c0 _8 b7 k: v! j& E
    4 Y* C# b- u0 _" Z6 s( g" U7 _
    不知名网友:666666 牛批 老哥我要学!!!' X( i" u- O. q+ c6 g9 M0 t' B; C
    ) T: [- r) u) F! u/ H' i

    5 U( Y+ n4 P+ [
    6 u( M. U# D+ N5 D. L
    ! k* m$ P4 W, P! ]
    ————————————————
    * H4 Y6 `# L# p0 |版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    : E* [# T; {0 R% b7 L6 Y! ?* }: f% D原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    0 j( [! N+ r* V* y, x; b7 a7 T8 m
    # u5 a3 N2 {) _4 N2 u$ J4 u# K, n4 V+ Y' C2 V+ S# H" 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-9-14 00:07 , Processed in 1.787424 second(s), 51 queries .

    回顶部