QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3117|回复: 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

    / Y+ G/ [; O, B用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    ( m, s0 ~1 p; r今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    # S4 N) `' A1 u* @# D+ \2 K  g$ v5 i康康大家都怎么说!
    $ j$ r2 y3 T; x% p7 {9 Y1 o! A4 f6 m( G! n# f9 u
    1 o8 C4 _( {8 K; [$ z" x% H
    4 M: ~7 b4 E  f5 a2 D  G

    # [% u5 b" [, j) h8 [开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    # R7 M, |  I' Y4 o" _8 e0 G. ~" Q7 \* k* ]! v* O5 ~% \* S
    * j# ?1 I$ {8 ]: u
    如何安装模块:
    ; E; L1 F, C# T. t+ }# c9 G) J  }

      m5 P. ]  V! F# x6 D) V; Vwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
    - f! I! y/ X, L( ]& i4 [pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    5 [1 x, g3 \6 _如果模块安装失败了,可能是这些问题:- e/ s6 i& k2 G* `; b# c; }* L

    ) s7 m' q# G/ D$ g6 s7 n  E

    9 _+ c% a+ t' {7 a. _提示:pip 不是内部命令+ M9 p' O2 k" }# q
    你python环境变量可能没有设置好
    0 d8 f8 \! ^) n+ X1 c4 ~/ A; ]$ _有安装进度条显示,但是安装到一半出现报错了
    1 G. \4 T! G1 _$ z8 \$ E+ r' |" B! a因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    5 P0 A, c/ C2 h( {$ Oread time out 网络连接超时 你可以切换为国内的镜像源/ ~+ b4 [, e* h# g+ g' h+ u
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    7 }. X- c& }! C# H2 ~你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    $ d7 x4 _% [0 E# E可能安装了多个python版本
      \1 ?5 o1 [" c安装一个版本即可  }8 x9 X3 {6 o' u: {5 u/ l8 U
    Python做爬虫到底可以做些什么呢?3 m# B4 ?8 e! F3 G# u& V9 ]" w

    2 @+ L% X1 y1 z& @

    - u+ Y0 R$ i3 K+ A+ C, _常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…# M. [* k6 ^9 W9 b4 R
    12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量+ ]7 e! H' S, `# G- Q( j* V5 {
    可以刷课 可以刷网课 自动 还能自动批量注册账号6 x" Y. d* A; |
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    # u( r) M  V' U; o2 N0 S$ `4 p0 b普通B站视频可以爬 番剧是需要会员的! z& `$ e2 _- q( t9 X' x% p* g, q
      [, o# n" c7 ?( I; |& A0 a

    # [2 B9 m" v2 D% N, H: F. |% i爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    ' J  X* S% Q8 X9 B7 c; [' \0 I. F/ {2 k' h

    ) m+ x$ F; `' ?1. 确定目标需求 (弹幕数据 那个视频弹幕)3 I, i3 K( {8 S; J( D: L; S9 [  \( [
        确定了
    $ w* ]1 o6 |& y+ i2. 找数据 (数据的来源分析)4 |5 F0 N6 D0 x% K4 y) V
        简简单单 找到了7 |5 _4 q2 b/ F& U7 Y' @
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    : B* r9 P" S1 A; e! Q8 \    请求方式: get / post
    # Z+ G5 n, W' I1 C4 a    请求头:
    8 w% S4 {8 r9 y0 C/ `) c, m" }$ i, I    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196+ M5 g$ u+ s' z, |0 x
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    % x6 z3 i+ @4 ?! z' S$ q4. 获取数据
    * f( l7 E5 k8 z7 L0 k$ c% F    文本数据 response.text 获取网页源代码0 |) j, H$ p& L) H
        json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    * A' `8 b& A8 s& j5 u$ r/ c; M, J    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    1 G$ P+ K) m$ g' f# Q7 z: U5. 解析数据. C; j& ?* _3 V& e! T# z
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 5 }; }2 U  R7 F; B9 v* {" _
    6. 保存数据  b* k1 `3 h# k
    1/ o+ n% i& J8 c: f: z& ^: k
    2
    ' [7 A( h" ?9 T: P3) k" ~. g4 s0 b2 e( |+ f2 @/ X
    44 @0 O; t. A' L: R: L+ @
    5. m7 S# w; t' |% f) C
    6
    " X6 }  \4 _/ O' y9 A78 G2 m  [0 k& [1 f3 L
    8+ a* i. {6 i  M. G* Z0 c
    91 o4 }7 ]/ B' |! G- y
    10  q! n7 ^% n( r
    11+ j" X2 y. h$ s: J) F" x4 q) x
    12- A0 D  u, u0 y4 E
    130 y& ~% E3 O( |; ^. a" L
    14
    ! Z+ K* f3 J  z( F0 N( N15
    : J7 Z/ v. @% ]- |4 ^8 \168 z, l2 S. t1 \# X5 S
    python除了做爬虫数据采集,还可以做什么?
    5 M7 V  {. B1 h0 f兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    ! Y! _9 s, k' I) f9 _; c! m
    # g4 c; x5 h" f

    . Y# ~  I* {6 {$ S网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K7 ~( ^% g" U; `" Z
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;" L  f, l5 _5 T* F( E) `7 I
    我可以做到这样么?6 a- W3 n1 ~6 N
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    & ^- o6 t$ a. d# F$ U6 ~如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    + d' V1 D, u6 @  S, n6 }8 `0 M7 x/ G- z2 z" ~( r

    3 `, x* T" K7 Q1 ]爬虫开发(脚本)(就业/外包) 可见即可爬
    " t& p# s$ Y. b: h虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    * l, j; f9 a# _; }  y1 x6 A+ [很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!3 v0 b" e5 R& N6 \
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!$ I- `+ ~0 P4 g" _1 d
    / U" \) g( E5 j: m) B7 H
    * L- a  }: A1 a+ c3 P* K" C) M/ v+ C
    数据分析(就业/外包)4 b8 z; F/ P! s2 C1 X5 a+ u; I
    6 W5 ?7 S; @$ ^! K5 r% Y& M' M

    ' d( G  }" e, _0 @, y自动化(脚本)9 ]' I" v: D. n7 q  M0 n. ?4 B
    ( k7 M6 ^! h( C. A8 ?7 i1 \' M
      P1 d' V  ?7 D+ K0 Z* E
    游戏开发/辅助(脚本)
    * q: g9 G. Z2 W# K, y* ~
    # f* D2 Z( I9 @  p0 v
    7 v, A: B( ], g& ^' S" x2 v7 o
    人工智能(研究生以上学历 要求很高)
    4 {4 W5 z5 k) ]4 J; U! v% V
    ' c4 ~$ ]. I- Y( b9 H

    ; b: n, W' q7 j9 R6 n5 q$ Z& c等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。, _# X$ F. \8 t4 J
    / c- v. \3 X8 q. u* l
    * M+ N0 A0 S- B6 g4 N. M3 ?& l
    我们开始正题吧6 W; b# ?2 }. E, X1 F
    9 J5 c2 N  O7 I: x  Q

    ( p' n1 o9 d: D2 f/ h爬虫部分:: N5 p8 P. |* U
    发送请求 第三方模块 需要pip install requests! W7 x  }9 v9 ~  Z* Q. r' Q' I
    $ U) t" ?" \2 p# `# R
    5 a6 b+ }! m! \' E' t4 p
    import requests- R0 s& U/ y; k8 Q( G4 p8 X) Z* Y
    import re  # 内置模块
    ; u5 [8 z; {  q3 X8 B
    1 ?0 V5 S, x/ ]- ^

    4 P% ]; u! i3 G' r) `url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
    4 L. e  c4 |+ [0 |# N4 i: [1- Z" m/ F! o3 Z
    2
    ( m1 T* r- k" t3
    % X9 M! U' r$ M2 W1 b1 _) W4
    ! G: x7 y# G6 ^% F5 d" c请求头的作用就是伪装
    # |0 N+ {7 d6 _: u0 ^# N  E! B( L, L) n4 o. H4 h* L' K; r0 Z
    & l/ O0 D$ X3 j/ u
    headers = {
    - n7 _8 D% h: T- n. X    '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'
    6 e7 f. m4 P: F, F}$ S2 t) u7 `! Z3 W2 o5 Z3 b# ^6 @" ^
    1
    : q% M$ T6 {  x& c2
    : g7 L1 k6 \3 d# D: c4 r- Q0 g3# [% j$ P# M/ K$ a, k# b1 D0 z: q
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据# `" I6 ]: W- u  i
    函数传参( c- I$ n  Y; {8 l3 X- I& G( L
    # P+ g5 ~, Z0 B/ X7 d" k" }

    1 Z9 V5 _; _7 M( {) g- Iresponse = requests.get(url=url, headers=headers)  t0 i7 u2 q) U
    1
    ' A2 |& K* u4 l' c4 @4 S' _$ E<> 对象 对象意味着你可以调用里面的方法或者属性6 t  W4 X: E9 ?7 {" ~9 K( s, N
    200 状态码 请求成功, i) A. G: v+ l  A5 A: F( m
    获取数据 文本数据2 {/ ?" N& D" d* Z
    自动识别编码
    ( N4 o. J3 ?' ]( n9 \: d. F5 f/ S% X! i/ L  I2 ]. E
    5 s' s: z7 N7 K' R9 d
    response.encoding = response.apparent_encoding4 U  P7 o8 x: d
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    7 r" @7 H) Z. N  W4 M; }8 h15 q6 B& H$ l  c$ W4 ?/ R7 q
    2& w$ Q% Z& R3 p/ O. m6 u
    content_str = ‘\n’.join(html_data)! H4 j6 c& B( D: b/ ^$ H9 b6 N* g
    ! Q2 m: ~7 M# Y4 G* P
    / l' ~0 O$ O9 ^# R% M( ~+ J- l
    要列表转成字符串 ‘’.join(). ^9 c& b1 N. w. n
    for 遍历
    - s& F, X; _5 m5 U( O4 W# Q保存数据 保存字符串2 e  j; c3 f9 }5 R3 ], }9 ?' E* R9 a5 o
    for content in html_data:
    4 v4 j$ J' E  F- B2 w" W4 {2 j    # mode 保存方式 w 写入会覆盖 a 追加写入
    4 ~! E$ J; Q  |  w    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:% p# j# U/ w$ G: t1 Y# P
            f.write(content)
    / E$ k4 N3 n8 [8 N' ?: ^) H% {        f.write('\n')
    % l# ^3 J0 z/ R/ U
    6 @' w. o2 E( Q3 w5 \$ P% S
    9 z5 W9 \9 r! g* v9 A; [
    # print(content_str)& S8 _) a9 Z1 ]! n+ g  C3 b
    1
    . k2 t3 i$ d. c9 s+ `+ Q8 h" y23 r5 J9 e. I' ]/ w5 H5 a; E: |4 K
    3% L( b2 `2 j4 {+ n9 x) q
    4
    2 }2 D) m- r* t3 {5
    ) e" J' M! x+ S6" C( r) H. i& q# ~$ b
    79 G; _5 B' _) c. X
    爬取结果
    1 P3 l( [6 Y- r7 z6 d( S1 R! p: q; `1 O) [5 w) ^: `
    1 j1 C- e' [4 s3 h( {
    ! I  b# X( l0 m8 \
    3 @# I6 S8 K6 z/ B' Q
    然后我们再来实现制作词云图部分
    ' }% Q  u: @6 b$ _3 \7 C: D" N0 |, S5 o& v

    " `$ y0 j, Q; y" U7 r; y3 v首先要安装这两个模块. W4 a% d% W+ ?% \/ a
    8 N5 w: o2 W' a7 o

    ! J# Y5 f2 U& E7 W1 fimport jieba; m3 y! T0 G3 J5 Z0 W: X* X
    import wordcloud( i9 A2 J+ T" I" v5 a3 T
    1
    3 \( B( x3 H$ L& Z9 a& U7 a$ S2* Y6 H! B! z( C" z, ^
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    7 b" L' \. `; i" u$ s; t, z( o8 ^0 p
    " q4 a* i3 n! [  w: [
    2 {, D. N: h& A2 P' U
    f = open('弹幕.txt', mode='r', encoding='utf-8')
    9 J) A% B( x' T) H: utext = f.read()
    # o( {1 }" K9 Etxt_list = jieba.lcut(text)
    : }: H. i8 y. h+ @# y; p# print(txt_list)
    + K) ?7 }0 [  \6 M0 I( A11 T! y, ?/ S' {! V9 w$ y8 g6 g
    2
    * z: t/ p9 u! ]9 v3& Z) u1 o+ u* g6 p0 q! B1 S
    4
    3 i4 N4 u% s, ^$ v列表整合成一个字符串
    3 g( ]% K: J/ A& C3 t
    1 I  m+ b& x$ x% u1 D. V
    ' r0 K9 z- s# E. i1 L# d+ Z
    string = ' '.join(txt_list)7 p6 r6 L- V9 R
    print(string), w% e& C5 `. y  ]3 q4 S* c7 M1 @
    print('---'*50)
    * R4 F! j" v% a3 n" h9 Uprint(str(txt_list))
    / X) Y$ [' Y. Y# A6 T4 @1
    6 H5 Q1 ]6 {( m: I3 v2
    4 O' }9 e1 Y9 W38 W6 M' K6 ?: B1 |; h# ]7 T
    4! }1 R4 \, Z: g3 `
    词云图设置
    5 R$ W/ K5 K! B8 M/ S/ U3 \# C" K1 S, y

    - S1 S8 c* U1 e3 Jwc = wordcloud.WordCloud(
    , g( G, Z% L. P$ z        width=1000,         # 图片的宽
    0 m& \$ J$ B" \; Q! f        height=700,         # 图片的高
    - W, }! l. W. z; V' B, w: b7 _        background_color='white',   # 图片背景颜色
    " T$ e& Q! |2 j$ W1 c        font_path='msyh.ttc',    # 词云字体
    5 R: @) h8 t! @) y0 k        # mask=py,     # 所使用的词云图片
    ( R+ D7 d' J( p* @; b: L        scale=15,
    ( [) }$ A7 Q* o$ C        # stopwords={words},         # 停用词
    1 o+ t7 x% N0 s        # contour_width=5,
    3 R" T$ F% L- t$ J" u  }" s        # contour_color='red'  # 轮廓颜色$ N8 B9 r. O2 E& {' {/ e
    )& i# s6 ^" q  N+ x' n# E3 C
    1. v0 x/ F* k  |3 d4 K: V' F3 p
    2
      C# f, N% C: A5 k, }! O! E, p3
    9 K4 t& H+ y/ H/ j' G% _# Y, @* w4/ @) f, |0 A' F. H
    5& N7 e7 \: _+ z" @/ I/ }7 f1 ]. k
    6
    / y( B+ D2 c. [. Y3 [( x' U7 k71 A0 t4 _2 \4 Z9 J
    84 B6 ?% @# l) i) Y% Z* O& j
    9
    2 R0 @. j$ j5 B* h10
    5 c4 O0 i5 f9 }. N. y113 j# R5 n7 x+ v4 k$ m
    给词云输入文字
    ( l$ o7 A- E1 ^& }( F  A* W9 `) @& z
    # Q+ V4 {; r" ]0 y& ~8 }# y
    wc.generate(string)
    1 J4 K( q/ B+ x1 S1
    . H4 V) L% ]" n, G' F( C词云图保存图片地址7 t. p0 l. d' q+ t4 `' \% _/ m8 t

    8 B( U' N. O% P# f0 J7 A- V3 H
    * `$ x' T& {2 u3 w. E
    wc.to_file('output1.png')
      d: y+ w* G+ N9 z% w11 D8 I  p7 e5 }  y" M
    词云图的过程中有点慢,大家不要心急7 d. p7 @: a1 F- R' q$ [

    5 R/ ^6 @% P; Y% M' G5 A
    4 r2 J) s2 c; a( [4 ]
    这是最后的结果
    1 N6 M5 N0 X8 Z" J, N: c. x& Z( ^
    . B, d( v/ G2 v2 N+ E  n
    没有加停用词,所以一些无用的词比较多7 T- T: N! H4 j2 @1 I

    / G* T* ^- w' [- |8 c) I

    . W  f% S" k; }  n, I6 o, cstopwords={'了', '啊'}
    & l, U- X) }  t# l+ a1  v  h3 K+ n2 A  B2 O  G: o
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    - U6 ^, h% c8 u6 P! ~  |9 a$ t我们再来看下
    3 |7 s% Z/ V# p1 E- p7 c) D9 I" J+ q

    6 B& C/ s. ]: F  M不知名网友:666666 牛批 老哥我要学!!!7 {. ]! c% R: e
    6 I7 r, m- E! @, v

    9 d3 n6 X* O' j% |& ]4 N
    : P$ `5 k! J6 t/ B+ m9 J
      d* O, K1 Y( ~9 n" n/ x4 o
    ————————————————% P; p6 k9 b, H6 F' e
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。  V6 }0 D8 h. B  Y4 t
    原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 V+ j* O6 w' e1 U& d: _% y& n
    2 R# f$ E5 `. J" K# r, f
    % E5 N: p! d* \; Q) F* p
    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-5-26 20:55 , Processed in 0.323820 second(s), 51 queries .

    回顶部