QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2581|回复: 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
    - u1 A1 @* Z' N6 s7 D
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!+ X9 _( N9 H1 V+ P5 Q
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    9 D2 y% B; W9 e' t- g康康大家都怎么说!
    + q$ B; b, a0 Q4 H8 z
    + N6 q( j+ A! _5 ]+ b! w/ F+ h
    9 ~( P5 A+ t4 O- O: W# g1 a
    4 h3 i! _! e  q( |! G
    ( s. l( D* M1 }7 \
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    / W; k( l2 g8 f$ W4 d) n6 P. B) `. U5 f: r  i+ m
    0 ]% z$ Z* @- s
    如何安装模块:; A( \+ v- x( I
    , I9 s! H6 _$ H
    " Y/ M  M1 H' ^! c7 P* [1 _' V
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    3 |3 O! E- N* `! W* ]pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    8 x% ?( k4 o4 m/ w' x" ]; l如果模块安装失败了,可能是这些问题:
    0 H" w# s% \- I# W" q% W6 l+ Q; J! X3 @/ C

    8 w8 [$ l7 R; g4 U) i4 D5 }提示:pip 不是内部命令
    0 d: f4 K7 x9 ]/ _. m8 [你python环境变量可能没有设置好
    ! y; ?6 b' ?+ c9 J0 P( s有安装进度条显示,但是安装到一半出现报错了
    . `% f2 Z8 j# J7 E2 j因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    & y8 G. C. s& ~+ u) I( |) vread time out 网络连接超时 你可以切换为国内的镜像源
    $ z0 G+ R% b: K+ Y明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块& Z5 B0 l4 q! \
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    7 g# z& j3 j- ]& T可能安装了多个python版本
    . J8 Z4 Y$ m$ Y4 C6 A安装一个版本即可: T9 r9 l* C' T! f# k* ~) U( U6 N
    Python做爬虫到底可以做些什么呢?
    : K1 b( |4 B' K7 k2 Q3 ^# h: D+ q2 M
    2 q' D. Q4 m7 R' M8 L
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…, Z% D3 I, x% r
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量0 A( L7 T( V4 c6 q
    可以刷课 可以刷网课 自动 还能自动批量注册账号
    : O4 w+ ~- J# s; u0 ^' R& r模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    * f/ x: L) N8 S) J% o' R普通B站视频可以爬 番剧是需要会员的
    0 _& `7 |( b9 X( O' P9 i8 T4 f* d' R; v% q, I7 z

    ' A9 s2 E6 o, i0 }1 }爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    3 ?5 j- y5 j+ P
    " v9 t. M9 k4 _2 f

    8 p4 I  `7 d: T3 Z+ |1. 确定目标需求 (弹幕数据 那个视频弹幕)
    + @9 e, z6 A! v3 u, @    确定了% `1 K& s! m# U( r# g" @
    2. 找数据 (数据的来源分析)
    . R2 p; G# k, |' a: s$ F    简简单单 找到了
    ! f) a* X$ W6 x1 T0 t% C* J* h3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    " R; E" S4 A# \: M# Q. t/ {  U    请求方式: get / post. L; h; l: B6 c8 w$ |
        请求头:
    4 o6 g8 P! }8 Q. q; ~# c) G    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196( H4 K2 F0 F  g, `$ P
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    ! S* M4 l, p1 J4. 获取数据
    * J+ Y: Q  Z0 n5 Y& U    文本数据 response.text 获取网页源代码" {7 q5 z( Z8 Z! Q  T3 [
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多$ ]; C$ q4 v/ b2 ]3 P5 y  u
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件 $ r% m7 L) d8 c4 @8 h
    5. 解析数据# }$ V2 X2 T% {, q- j5 p4 a& ?2 q
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 ' b3 I, e) V9 h& Z1 V
    6. 保存数据
    ! |: p. R7 S% J0 u1& j% k& k( |3 o) j( s
    2
    / z; M' F3 q- {& @! t3$ \3 z& }5 b( `; U; D" H7 Y. l
    4
    1 \3 N8 c& v! r$ f5
    ; q- ~4 ~5 ^" C. I5 M6
    4 ?6 o9 d/ C5 ~+ _- j) b7
    3 ~8 f3 f) e# ]3 Q8
    9 x' u  B. u5 j- o7 Q9( t" S9 |8 p9 q/ Y
    10
    , ?. F5 S+ e0 ~( p3 ~$ j11* M( F# b5 j# M# t# g8 g
    12
    2 R" N- q( C7 x) y4 O  v* q1 @138 @$ n. i6 I. k  M& H: G/ b( u
    14
    6 I# o7 N' |: T9 M4 q( T15
    1 W; h3 \) k% R$ A# G0 |16/ y1 [; r6 x1 X* ?0 }; e6 }0 `
    python除了做爬虫数据采集,还可以做什么?5 L% |( @7 I, p- k
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    ! i$ t8 m( |# V" Q
    7 b6 R, `6 n, M8 y# I. V
    , O: ~& U& N  a; P( G' @+ e$ j
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K% }/ W9 l5 {! V* Q" M
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    ! q" @5 ~+ m* G6 |2 r+ U- m7 a我可以做到这样么?5 q7 b0 s# \2 S7 o4 A, x
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    # T, ^/ D% I7 D6 Y) ?8 ]如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    + H0 [# M$ Y0 f
    * g+ T; q! E% J$ }' r; I
    % I  K' A) m, ?4 m& h+ O6 _) W! P
    爬虫开发(脚本)(就业/外包) 可见即可爬4 T1 J' x- ~5 T
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!8 x1 u3 i6 E: t6 I2 Y# F( X
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!0 _/ K( x* ~3 v% \5 m# _
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    ! x, e! G" l0 m: N; f* H( n8 p6 h5 B! B- D+ i9 Z

    8 U* F# S" O( M0 |9 Z7 R6 L, P2 m数据分析(就业/外包)
    $ w2 e/ E* X5 t7 k* w. U; N- N; b3 S# D' g# m) M) D

    $ {: e% P4 b- B自动化(脚本)% z$ }$ i5 j7 }0 I- |7 K9 F
    ' N6 F. t- S1 t6 F

    % R3 L" b3 R1 p5 J游戏开发/辅助(脚本)% J! e5 O" g5 q$ e& u2 P: @

    5 v+ o1 R" m) ~- Z# ^3 y3 @

    - r4 @& ^: w: s& ]( n% p人工智能(研究生以上学历 要求很高). {: g3 s% G# K. J/ T  b

    1 w6 \: H" K+ {& M* ]' w" ~
    " W  R$ E" q- m5 k8 ~% u
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。1 L' x+ V4 n. ^2 i! `: g+ o

    ( ^  a4 t9 M1 Z4 }

    " Z! m- q3 _  O, V1 `9 t, Z我们开始正题吧
    . v- L+ K  `  o+ t# j. {
    # [6 z7 F, ~: Q1 K& y! h5 a& s1 [
    1 o  n. \7 M9 u6 X  `
    爬虫部分:; L( {( U; N3 Z( l+ y% k. S: }
    发送请求 第三方模块 需要pip install requests
    - N2 W4 z5 b) n* ]1 I% [/ h% T. O+ P- r6 ^/ j; i$ V7 z

    & |6 n' W' `* n0 `6 y; u8 Fimport requests/ e  v( R4 w) r7 w/ Q, H- m3 J& R9 S
    import re  # 内置模块7 K' M+ E7 w4 K
    6 m7 Y7 s. C1 y$ S5 i9 H2 J" i4 P

    / ?$ D; R: G2 \( Q  W$ T* purl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'9 d- L) d2 A# p8 x8 P1 r* l6 v2 p
    1' U# u. K+ i! I7 J2 |1 ^4 @1 }
    2. S; n# G" j2 d% \+ @: z, x0 c7 j
    3) G1 i5 T3 }) n. `7 v' i2 @& c
    4
    # A' ~+ U2 H' ~' G请求头的作用就是伪装* S; F7 F9 t- E3 m! Z5 _; ~

    1 V) `# K, }# R  w8 ^

    ( c; R& E" ~0 d, k  Y; A0 x. A# uheaders = {' C) j2 l* Y3 F7 ^! {4 V0 ]: w
        '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': b9 K* H8 H( O0 F
    }
    1 ~4 }) A, y1 A, u1
    + O  s8 M( g: b, \26 F. C3 ~; O; ^* X
    3" M9 y3 P; w) W, R+ C
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据& d& C3 g- k8 \1 T
    函数传参# `$ g0 K& T: X& s5 r5 t
    ' p' }7 H- a' `: J& p: e- G

    0 p# H% ^  J( Presponse = requests.get(url=url, headers=headers)0 s- n* p  R: a, R
    1
    & [( ?- o& @9 [* N9 X+ Y<> 对象 对象意味着你可以调用里面的方法或者属性
    9 `* |' w' }7 b' M; ^$ Y200 状态码 请求成功
    : g! g8 K  S9 x1 l获取数据 文本数据  e6 r" ~3 F* g1 S- w
    自动识别编码3 `, E) R$ j& u& k  c
    ' h9 \8 l$ D& g% [
    4 }, G0 a. w8 {8 ]
    response.encoding = response.apparent_encoding
    5 n4 \& F+ s, x: `html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)5 ]& \" ]' X4 n
    1) L0 ]) B- [$ m! W3 `3 q+ w( Z
    2
    9 Q8 V, N. W" G  _: B+ k% kcontent_str = ‘\n’.join(html_data)4 s) M7 N, ?; Z* u4 D0 S% y) I

    / U9 ?/ U. q6 R( m! b8 I& M

      l1 P; O' t( V( b9 g要列表转成字符串 ‘’.join()9 T7 o" O  D; P6 m* M* ~
    for 遍历3 _1 k1 @7 q: d; c
    保存数据 保存字符串/ a( `& Q) R; U
    for content in html_data:
    0 i7 t  U/ t( L. l9 v    # mode 保存方式 w 写入会覆盖 a 追加写入- n/ H" K# h4 [
        with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    # d" E3 j7 o8 M: l" u        f.write(content)
    # z0 J2 H! n. @        f.write('\n')6 E! x( \: K% U
      }. F' a0 Y# }8 ~; O* @9 z8 m

    * g3 j# O: H# h* _7 O# print(content_str)$ K  c4 C0 x1 _; a4 y
    13 Y  S0 Y4 E( C9 _1 F
    2! m$ r* N$ Y% y) L
    38 f: P  H8 `: J) T3 V5 M9 K6 H5 ?' }
    4
    6 \% U( N0 b+ ^( Q( ~: b) o* C5
    5 u# y" }0 h4 k# C4 a69 s* u0 d" F- ~# ^( D
    7
    / M- O' k2 J# Y6 l* z) |5 V' ]0 F爬取结果( O! p9 I2 u  _: Y
    & s* |* x' \+ s: ~

    8 z% w. }2 I7 c- f7 g0 ]2 Y. H* W3 d, z, U" a
    & t8 M9 o4 j" b% K( u
    然后我们再来实现制作词云图部分
    3 I& S! L8 A" D2 Z
    % \9 B1 j& i  P  b
    ' `2 C- R' Z$ ^
    首先要安装这两个模块
    " ?9 C5 t2 t! P% A: ^. z5 ]  \7 k
    1 t7 Q+ ?6 L) ~6 o
    2 p4 I9 [: p# m" P$ P7 Q7 ~0 {: ^
    import jieba0 [% B1 s; [& _! _! g
    import wordcloud
    ' u' `$ E: u( [, }7 M1% |% k  B. T9 g$ A1 a& X
    2
    ; l/ |0 y* ~6 E! |  c/ U一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    # y$ s8 R: u. `' J/ z' _% ]
    . |+ R; X1 n) k+ p

      O# a$ g: J! K- f. S2 B0 }f = open('弹幕.txt', mode='r', encoding='utf-8')) h, @$ ~9 \0 {9 c4 v. z' s
    text = f.read()
    ) T. _3 l) v, `6 L8 ctxt_list = jieba.lcut(text)
    : ]% g: E1 r. r; r# print(txt_list)
    & |& x  [) i/ [10 O2 R; E1 p' R( {7 c
    2! |* F2 V, S, W, z; W
    3
    ( _- u  }- a4 ~; X# i8 b' D6 D& B4 r4
    , `" m4 o3 V) j$ Q6 k: t列表整合成一个字符串
      x5 H  T3 [8 n
    3 \4 `" }- ~* A( O( ~7 W

    2 R$ g8 x  n6 v4 T8 h* b9 ]) Wstring = ' '.join(txt_list)
    * }" l3 s5 [& L4 c. f. ~print(string)
    ' _: M0 z- W% L+ u5 P4 o3 gprint('---'*50)' [* `& w2 J0 b/ N7 Q
    print(str(txt_list))- m! I) [6 Y; @( C/ |( L
    1( o5 [1 S7 _$ x% ~9 V2 d
    2
    , h; D: R8 C  u" d5 W; }3
    : I- t6 ]  @' Y" O& c$ S49 \. H  g' f- S) K1 v
    词云图设置
    ' N5 g6 Z4 i0 s0 H; _; Z% g2 s7 y4 ?6 N% m7 u

    ( @7 o; ]1 _2 O% h+ m. m0 }wc = wordcloud.WordCloud(
    3 o, u, x  ~1 s7 h        width=1000,         # 图片的宽
    / V" c! P% P4 |# F        height=700,         # 图片的高. ?5 w5 b* q1 k* D( ^* v5 m- P
            background_color='white',   # 图片背景颜色
    8 E% @' `* `) \% k& h$ U7 l        font_path='msyh.ttc',    # 词云字体
    6 n; {& y4 b2 q5 S1 p8 x        # mask=py,     # 所使用的词云图片$ ?' B+ z. G  U) Q, C1 R0 y4 d% T0 @
            scale=15,1 E6 a) R. r! S
            # stopwords={words},         # 停用词. R$ f+ v/ T. u6 f8 i8 q
            # contour_width=5,
    ' |% e2 @2 k8 u9 [/ ^        # contour_color='red'  # 轮廓颜色, ?" q: E+ V/ `5 `& Y
    )
      l7 R# ^6 W" V( S8 y6 A1
    $ H8 D7 U" \: n3 d2
    ; f) K' p* n9 u+ }! v36 f/ @2 j" z4 r
    4
    3 ^7 r1 u: ~2 P- H& E% }5
    5 S8 n, m: S0 @4 `1 u6
    ' @$ ~) z  [8 S2 R7
    * x& L% s8 t1 V7 u+ e, _80 G2 Q) i9 A5 {1 \" _0 Y6 _
    97 z, N: J3 y3 M6 y8 k9 \
    10, h+ Z. y0 w/ B4 W! |# L8 J
    11- x; p* p  t/ R+ d+ w4 n" }
    给词云输入文字# K4 v6 \$ q, K9 z0 W3 _$ ?5 h# i
    5 M$ S( I- a' d: t5 d% [+ [; M: [
    6 K% ?- M& c9 @- n8 \) r+ B
    wc.generate(string)
    % `' s1 Z+ H$ d5 A1
    ) O7 Y; B4 \6 C4 }词云图保存图片地址1 }* _" H5 ?/ h. `! i

      x5 q6 [) T) H9 K! r6 t8 U+ L
    ' s3 m; d& E# v( b0 B
    wc.to_file('output1.png')
    9 z5 O; {- \, n, m17 p7 Y" H/ z7 O0 M6 X" A
    词云图的过程中有点慢,大家不要心急
    + \1 }( Y1 g: G# z' M: Y
    8 w* s. T: f4 V" c+ i
    ' |8 @, S+ X6 f  z+ W
    这是最后的结果3 Z* }8 {* V  V: p- t2 ~& e9 ~

    , m; S# Z9 z; C; g, P  x! ?2 ?  D) k/ a

    $ `+ N! T. x0 J没有加停用词,所以一些无用的词比较多
    * g9 Z9 X* O  V9 J6 W  y) x3 x* j5 @2 s' D( T( `

    . q6 O. h& B, ~stopwords={'了', '啊'}
    4 i( d% s1 x) ?6 ?5 [; U+ v19 c/ O/ F/ h  v' _( l, k) `, C' p
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。% A" K' a: c0 z8 Z' w9 c/ _
    我们再来看下/ G' l; Y$ j! j8 r

    - d% g# j2 U8 O: x3 A

    ( s3 G) T' y+ v; H8 E不知名网友:666666 牛批 老哥我要学!!!0 w. X! D' \# o+ p
    : \. ?7 Z$ C  m0 p3 ?
    ; b# ^8 B# [$ M( B5 ?; f' H

    6 u- x( G- t! g4 x
    8 C' q/ o" P/ p) `! N# c+ V
    ————————————————( D4 o( [4 k3 L* k
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    5 [* u+ L4 i* U0 b原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
      P. Y6 z4 K) V
    . {6 K( L& {& l" m  q' D
    ; i1 H2 h( l% [3 R" X- 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, 2025-6-25 02:37 , Processed in 1.132101 second(s), 50 queries .

    回顶部