QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3106|回复: 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
    ( n* M  p3 {" i7 ]: @, s6 d5 `
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    / w) i' Z! q  a4 r今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!3 y0 t2 v7 a6 h, T) j6 J, t
    康康大家都怎么说!
    / l9 b8 X. H+ ?- h5 J5 e
    4 A  S/ f% m( A7 D$ U
    8 T8 a8 E8 ?, y
    - ?/ I, A  i; \% n- L

    1 b- C) ~) {; p6 i, @开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。5 U# q) J" W. H: }0 l9 E. c! I
    / i& q2 Y* f9 D6 g2 {
    ! c% `$ R9 H) T* O% \& ]0 Z/ c
    如何安装模块:
    ' J" X4 V7 m0 S' v0 Z. T7 Y9 B( D& `& ^) X7 V; s  C
    & D* y. C5 J) L8 A  _* z% O$ M. ?2 w
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    & t" [7 ]! y8 Y+ Z6 @pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    . [" F$ N4 \1 v% ~. l, \( u$ S如果模块安装失败了,可能是这些问题:2 L( p1 q' _% X
    5 |1 l: {& m& Q" u& N# n
    ) q7 w: ?4 S% Q: z" P# z
    提示:pip 不是内部命令- o2 j/ b" V0 L: z3 j' T
    你python环境变量可能没有设置好; s* b( j' h1 l
    有安装进度条显示,但是安装到一半出现报错了
    0 w5 B7 Q8 D% i) ~8 o因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    ! ]( n" M1 m5 Pread time out 网络连接超时 你可以切换为国内的镜像源! T" E$ S+ ^- A; ?3 X0 l
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块0 y* {& B1 e$ t
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下/ g6 r' z! j5 S6 d: b' Z
    可能安装了多个python版本. g6 N1 {- c3 n$ Y" K
    安装一个版本即可6 V* D! |- w% F
    Python做爬虫到底可以做些什么呢?
    % Q) W8 k6 H7 v0 H
    4 t1 d4 j; p3 G) X  i; z! ?

    $ E. G) @/ K8 l+ x: R常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…0 T# {9 K. ^" f2 t
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    6 h8 F5 |6 L2 r7 S1 U2 e6 B0 h可以刷课 可以刷网课 自动 还能自动批量注册账号: a8 K) f" H( m4 b2 r8 x
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …( I7 q; ?# I( j. @9 F! R
    普通B站视频可以爬 番剧是需要会员的
    . t2 P3 B! B5 ]4 X# k4 |6 T* D( a' [: K7 z7 ~" V

    5 B# K$ k$ h) W! g7 b爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    + F; `- C7 ~' X/ }* G, E% e1 q; h- K7 d4 ~( ^) S4 q/ F

    9 g& }4 K3 v5 y& U( N7 U( @+ F1. 确定目标需求 (弹幕数据 那个视频弹幕)
    / t, o2 Y. y% E* z+ ?- Y+ [    确定了( e( z1 ^% ^) n) [
    2. 找数据 (数据的来源分析)
    ) |$ M: m7 {+ l9 a    简简单单 找到了: d1 d7 {$ G# n; J* x4 T. o& P5 o
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    * |! E- O0 W( s6 j    请求方式: get / post
    0 Q7 }; E& Y" h    请求头: 0 `2 {2 j; a+ R
        https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    + V4 Q. v4 h0 b  S    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)0 a% F3 n1 j0 f  ?: g* g
    4. 获取数据
    1 t1 B- r0 e1 K1 Y/ y! J    文本数据 response.text 获取网页源代码8 `) R* ]6 s: `1 g
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多- A, T5 S( ]5 P4 {$ A1 {
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    * O+ {, K; o$ f0 \6 y5. 解析数据
    & i$ K! _, C% S, n2 K5 i    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符   w9 ?% @; H4 E
    6. 保存数据
    " e7 l: j0 }' z4 c1  Q' s: x- z6 R0 _$ L
    2* m: y6 z  d# R7 q7 L; X5 y& i; z. K
    3
    $ p4 h$ F  Z7 H/ C& U* _/ G( L4
    . i1 G, v! P* c; ?/ ^2 N5
    3 T  Q: |3 G. ]" m- B  S/ X5 b) J6; Y% E' [0 L2 y0 [
    7
    / x5 w& \, M1 j, e81 h+ E6 {2 m2 G: ]% L  `, t
    9+ |/ ]! Y% R; v# A1 e1 g
    103 c' K5 w' C" x9 W4 ?9 c
    11
    0 O5 v7 ^7 u; k* N$ K  p+ l12
    " H6 `% v5 s# I# e13- }# q, x( T2 D0 P: n+ j
    146 M" M6 ?: h7 _5 e
    15
    8 s  D  H9 \, {" |& l8 W% D165 m: i/ W7 g$ S4 m' {1 D( M
    python除了做爬虫数据采集,还可以做什么?5 n* F, L* B% F4 z0 o! D1 \
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)- [* A5 \; D/ F3 k" p8 a) x
    + L2 |6 D3 D* q5 v

    - O0 I, `' ^( e网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K# A! O2 f+ d3 G9 w0 R2 c/ e* b
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    # E/ S9 e( s9 ]* h3 c8 ?* g; K我可以做到这样么?
    : |" p3 @1 n2 I; X5 d; O0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;. r& Y" Q% }7 c+ q- k7 j
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    4 m- t# w: {6 C% V' p2 ?" [1 A9 a+ A6 @0 f3 ^
    ) S8 E+ T: n2 o" Q9 R( j
    爬虫开发(脚本)(就业/外包) 可见即可爬
    ( `9 T, O! y" [2 V虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    ! D  ?) K& U$ I1 f2 M3 g. B很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    3 z# R& G* E6 C2 G7 _之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    0 _. i/ c# K7 ^9 H" T
    6 q% m$ D8 ~, N: ?6 q
    4 o4 Z9 C! i1 e, X2 N
    数据分析(就业/外包)3 k7 W2 M; G( |1 |

    / m0 J# J2 ?3 M3 Q

    7 V9 `; Z' f. F9 k( H自动化(脚本). ^! f( T3 f/ e9 V2 _) \
    3 q+ I! j. v* s" f

    * C) ]1 u5 B# j2 G" x' ]) I0 {) e游戏开发/辅助(脚本)+ c+ q. j* G3 o& N" @2 R7 J
    9 x; f! o* E5 z

    - C3 ~6 b2 z; i0 \人工智能(研究生以上学历 要求很高)
    ' q) v& |9 p* P- p, Z7 T
    : c2 Y9 T* F' |5 p

    ! [: j( O& z) H3 i: ^& |& q等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。- q# \5 G  X2 }$ R& n! L  T) h  C4 |
    6 e1 {1 d+ |) e3 J' R4 @- ~9 q0 z& i9 e  G
    8 D5 \; f; @8 L# i
    我们开始正题吧
    + F1 F, N9 W! a+ S4 _9 G9 R, y: ~$ o9 b5 t0 M
      |$ }! s$ ]  c& S" F, L
    爬虫部分:
    + @+ z) K- e: E9 I1 s发送请求 第三方模块 需要pip install requests
    ( W) i$ r/ K" G: \) b  w
    * q' \/ {' q/ V4 E+ H

    $ l: u% g  e5 W7 Q. y) wimport requests
    # J$ ]" r3 _5 j( w) Wimport re  # 内置模块; a0 Q! ]/ b% U3 i' ?6 J

    ' C4 `6 _/ x5 t4 u" ^

    . q. P+ x- E; a9 @# iurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'" ~4 L  z8 Q+ \, p- h
    1$ h2 B) P6 w/ f& _+ }
    2: k. f* O: U. x
    30 w0 A4 s3 L7 Z" d' o4 U
    4
    ! Q# c+ h9 I+ I请求头的作用就是伪装
    5 H4 t- w+ K/ p% f5 Z6 p1 v6 c- a" q' ^3 Y
    1 n5 p* A7 [+ D3 H  a. c0 B
    headers = {0 d; F& ~8 S1 H' k
        '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'2 y& l- k. B& ?+ T4 w  V3 J+ e
    }" E7 N: {: o* ]
    1% X1 X$ h9 E3 e4 F9 h+ ^, Z1 U: O
    2
    $ d; @4 i( ]2 k1 h3
    & B# Y# A; S1 e: x/ E模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    & |* q8 e7 r  ^函数传参+ J8 L! G/ g' t
    & ^# i: H3 m8 d2 d% j/ b

    2 n; ]2 `  {/ I! ^" ^( Hresponse = requests.get(url=url, headers=headers)0 l- Y6 d8 H" Q, r/ Y
    1
    & t7 }4 T4 g# i- O' w$ m<> 对象 对象意味着你可以调用里面的方法或者属性
    ! g' L; b/ P% ?" L3 I9 U$ U200 状态码 请求成功. O  O6 }0 ^9 {
    获取数据 文本数据' t" b# k) Y2 _4 e! P' s
    自动识别编码
    3 K" Q& R% A' {. r' T; n1 y: c$ G% I; E7 z# b0 I
    1 [  Y7 p; Z0 q# e$ ?5 w3 ]
    response.encoding = response.apparent_encoding% U; |' }- o! `1 o9 O& I7 J
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)( I+ _3 ]% \$ `* p3 N
    1- b- s2 o% `0 O; p, g) B5 w% O
    2& L4 u) s6 Z$ H  M
    content_str = ‘\n’.join(html_data)
    3 E. Q. o1 q' L+ Y+ L$ ~0 j2 @
    , K# t& I. X' O/ ]7 w8 L4 A
    * N. x: c3 Z" O, X
    要列表转成字符串 ‘’.join()
    / J5 `4 L- {& ?/ B: H: |for 遍历: v9 R7 Y( ]: D( q4 h+ t
    保存数据 保存字符串
    + x6 H$ H; X: B! R' Zfor content in html_data:+ E- ?/ j/ u# T/ G" {
        # mode 保存方式 w 写入会覆盖 a 追加写入
    $ _) \5 R' y8 f8 ~    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:% z& }' U# |/ C2 X7 W
            f.write(content)
    : U+ \9 s0 o! p+ Y3 y1 N        f.write('\n')( g! K) m0 @0 a* z# W& s: N4 z. M

    8 a9 Y& _" ]/ j5 }
    8 k0 [6 i% z/ }7 t& ]( |
    # print(content_str)
    . C5 Z' f1 L9 a4 R6 q" H1
    2 n, t: s9 L5 f2
    1 ~4 [6 F' y5 I+ f3
    " q: i6 p& a- T. j, \44 {  \9 t, r1 M, Q7 h" ~- p, r
    5
    + |1 U9 s2 h# a5 a& e$ v, I& i6
    ; C5 O, V& D7 W& u8 l% p$ k7
    ( X9 J) I0 G/ `爬取结果' g- {2 a2 S- Y2 C1 \

    . Y1 i4 w% h/ l% L2 A9 {1 l5 R
    ) |$ t) n" L1 w1 O
    / n) U0 a& {  D* |& Z& p# T
    + r2 S: x1 a7 d. f
    然后我们再来实现制作词云图部分2 m5 |8 A3 L& u' S6 p  v, ^

    # x- r5 F" y/ b* ~/ T; j1 J& G
    ' t$ J- f' M' M
    首先要安装这两个模块
    ' e! a- F1 s: h% t- H8 J! ?
    ' z9 R  n+ K# c  _- Q, `; u1 D
    # M' k. ?- U1 z" f0 x3 h
    import jieba- i' x% e! L$ t- u$ y
    import wordcloud% w8 o# X! m1 E7 W) l0 g
    1
    9 F8 L& |/ s) u+ P8 k7 S1 @3 N2
    7 a+ A9 p7 y: A# u$ p, P一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。. y4 [/ L* z2 E) k  W. w

    . V* f$ V" X6 O1 @+ v/ m
    , D- m2 B3 A4 C, H+ X: H9 d
    f = open('弹幕.txt', mode='r', encoding='utf-8'): l9 j% W; q7 q" U3 v. U
    text = f.read()( z7 V3 U9 q8 V5 ]
    txt_list = jieba.lcut(text)
    1 C; ^+ `; a5 U) }* H7 l: o7 j# print(txt_list), u( |8 P8 ]& V0 @3 W5 a: x0 K9 O6 r6 M
    1" x/ M( q2 p  S9 i- C+ _
    26 u2 k5 ~! H; F4 v: R
    3! b0 U: r- ^8 ~
    4+ b! a" N- C# h; o+ u: l
    列表整合成一个字符串1 I6 [& ?8 X2 z8 w- c3 M; [# w
      |+ y8 e# I5 n, T

    / d. D, f1 ?1 _" L8 nstring = ' '.join(txt_list)
    5 B' j2 N. {. `; [9 u' K* Y5 \0 Sprint(string)
      i- v  ~$ Y& Wprint('---'*50)
    ( V( w2 C2 h1 Jprint(str(txt_list))
    8 b6 g3 H8 O9 \+ E: S& h/ F1: R" G% h: K) g
    2
    ' i4 S$ ]5 G3 z! t3
    7 k( ]9 {3 p) I0 x$ L0 b: ~4
    0 @/ F) Y6 \" K' b- m词云图设置$ R- }' i$ c) k6 |# ^
    $ F7 X- @. n( i. T

    % }; l$ K7 S9 k7 Jwc = wordcloud.WordCloud(
    ( \) D1 ~. W9 j% v- K2 Q2 }        width=1000,         # 图片的宽
    - h5 n- z3 H2 Z# y6 x% X: ?/ w        height=700,         # 图片的高" p+ n& e  `- t6 H0 u
            background_color='white',   # 图片背景颜色
    / I) |6 r/ f4 H1 Q- `" @) I& A2 |        font_path='msyh.ttc',    # 词云字体
    + u* y" H) M1 h. x        # mask=py,     # 所使用的词云图片6 j$ q) q/ {- N& q
            scale=15,; y) W6 P6 K6 [- m0 g
            # stopwords={words},         # 停用词
    , J0 [" Z1 O- L) N5 D. h; D        # contour_width=5,# X4 e3 U2 B8 l& J3 Z
            # contour_color='red'  # 轮廓颜色
    8 ]7 o  m; x; O+ `% d)- T7 ^5 G, O/ @0 L( G8 b
    1' U4 G# G& k' C* g, k1 o
    2+ P( {" k, f2 N& \8 c- E( q
    3& F) |# m( S# K
    4
    : S- n& f) w; w: E0 Z( N53 U) A" v0 `" P/ t3 D' Q
    6) I, F. A" H. E: \
    74 a6 ]6 D* V* `; O
    8& ~! ]' L3 z: }! x
    9, i& b' _) }; K1 J  v. \; c
    10
    ( n0 R4 C$ `) V& J( {4 c$ @" p; X11" u$ N6 C8 f6 c- V
    给词云输入文字+ o6 H) I9 z& u' g3 X& {* O6 \- {+ Z

    # g( \% P% g; a, I/ _; Q
    ! x2 y) A' q, X. v5 ]7 W
    wc.generate(string)
    2 Y  F2 \. b: [. r1, H3 q# O2 {1 j2 j5 Q
    词云图保存图片地址
    5 T6 ~, K: K  i
    5 h3 M6 J6 x% A0 s( O$ B6 l3 C
    : q7 i6 `! e2 r( e7 X* p
    wc.to_file('output1.png')
    : Q5 p. L+ G+ T1
    ! s0 F' k" W) d1 e词云图的过程中有点慢,大家不要心急( R+ z) `. V9 r5 {4 t5 `
    8 r, F. N; x/ g) F1 B0 ]
    ) H0 y- V% L) i0 C# R
    这是最后的结果2 l" G+ ?' T( W- `3 S" e' u1 Y& c

      K; E$ ]/ \* D+ Y( `) B8 p
    " H" h1 h2 |0 A0 S! e& N
    没有加停用词,所以一些无用的词比较多" O1 q; Y: u2 k+ |
    3 `. _+ q& ]( M: u  j" L

    3 x5 m  e7 v) h  ~" cstopwords={'了', '啊'}: d9 U$ w1 A3 A+ u/ t* [; W: r1 C
    19 v! ~8 `1 f7 q( |' h, o2 r" Z: L
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    7 C' Y! y5 I8 u6 B5 V我们再来看下
    0 O  N) Z* W7 K" d2 s) A- v5 [, \
    " @: a3 {! N+ r* X4 y! x9 |1 x

    . l# s1 v4 L' I不知名网友:666666 牛批 老哥我要学!!!
    6 t6 i# L. E2 k3 V* y& n  X& M: a4 L3 I7 k. H5 F
    6 K* r0 `( ]& [( W8 y

    0 d. d6 K# I( A8 L8 z

    , d5 y% u- a) r. ?7 j+ f% d————————————————
    3 P' l6 O1 ]. s6 |- L3 ^版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; Z' O! v) W. r1 `; _7 O3 k
    原文链接:https://blog.csdn.net/ooowwq/article/details/119211907+ L) n' m* D2 P! W+ M( h9 N

    ! x* ^0 [: s4 S
    ! n1 \+ `, Y, q- ~0 E
    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-20 00:40 , Processed in 0.431948 second(s), 51 queries .

    回顶部