QQ登录

只需要一步,快速开始

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

    % e% K' }- Q' z6 C$ D3 E用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    , e( {* H) x: B, }1 ^& ^5 ~( C# W今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!7 e# b# t/ N( T7 N% }2 E& n
    康康大家都怎么说!
    ' O+ m- o  p, N: t7 \# I! P4 S1 v0 R: b
    & V9 V) o2 N/ R0 x0 [. q( c

    ) x# g1 \$ ?. O3 Y
    + g- x5 b$ t3 b: S) `
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
      X# C8 H+ ]0 T3 I; D% E4 O( J

    2 j* \3 j) J6 d# D. d4 @如何安装模块:
    % x9 C! Q6 I, p4 \: G
    * i2 W9 \* _& k5 h# i0 ]" c
    5 x  |; d/ ]9 T. s# X
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车* w: {) F" m* }! I
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车4 t" I. z, p( g2 E
    如果模块安装失败了,可能是这些问题:: U7 ~  G0 Z* g4 A# f8 L" X

    % y# Z0 c! ~8 E# s4 P

    5 Z) i8 |! e# {# ?: P2 J提示:pip 不是内部命令/ i8 c; a) n/ E8 Z8 c1 ~
    你python环境变量可能没有设置好; K  c" c* O5 F8 y
    有安装进度条显示,但是安装到一半出现报错了
    5 m% n' G! R' S7 R4 d$ L6 G因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    8 S2 ]) \$ X9 l5 M% d1 a% c( tread time out 网络连接超时 你可以切换为国内的镜像源
    # S1 @9 x; t, u4 S" s明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块6 g4 Q" U; U; ^% ^8 U
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下$ r+ ]5 K9 {2 O9 X; T
    可能安装了多个python版本: E2 I! n) D/ |" e: D* T" A
    安装一个版本即可5 K+ h& Z$ y! }9 c/ v; N7 N& i$ Y4 R
    Python做爬虫到底可以做些什么呢?0 N% y4 k8 z( n2 R( J; h
    8 f+ z. N/ L5 ]
      \* W# e% p# h# L$ {" [! i/ B
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    ) K7 Q$ V- B0 J6 {0 h1 o" e- H1 L12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    # f, Q. Z: W$ P  D+ }* I可以刷课 可以刷网课 自动 还能自动批量注册账号
    9 {, |7 l7 R4 {% M8 {% `/ w  x模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …0 `+ j8 m: i1 I; c' M+ a6 i/ C
    普通B站视频可以爬 番剧是需要会员的
      O! i: x) b) U! l  x3 E+ U  J2 l' X5 v7 k3 u6 K

    / o8 E0 ~2 [5 K' Q爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)3 @; \- r, ^- e$ f. x
    * r, Y; r+ T# S8 V3 d( U

    ' a  t9 E# R: _  K4 @' U1. 确定目标需求 (弹幕数据 那个视频弹幕)
    / ^* G! m  w2 y* o/ y1 V* |    确定了, {0 D7 \2 _: D) U- C( {
    2. 找数据 (数据的来源分析)0 I$ O% Q' l6 v# r
        简简单单 找到了
    1 I0 t" Z/ l$ X3 V8 o3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)7 k! g3 n7 y' b+ `9 j4 d, N
        请求方式: get / post
    ; k7 t$ b1 S: {' O' n6 d    请求头:
    ! V3 W5 w& s% M6 B* R    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    5 I( O8 x. k3 O1 R6 m    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    0 q. w3 a( t! ^+ q/ x4. 获取数据
    0 ^" o  B$ x6 N8 i+ g9 T2 E    文本数据 response.text 获取网页源代码
    + W) G/ [. N0 Z3 v0 j    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    & l. o, C( E9 t5 y, Y    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    ; p3 o; X, }9 L& R4 J' d5. 解析数据
    % n+ g' @5 S4 Z% D$ ?; p    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    ' u7 T5 G1 H: L! X9 L6. 保存数据
    - z8 ?9 a. j# F1$ ^5 _) V: C5 d3 S$ ]9 v
    2
    1 E: G" i% A) w% c5 H# y3$ Y5 S$ \- {' l7 j; H
    4: X/ l! P( y! B  H7 B7 U6 o+ _
    5
    , j7 N. B" `3 \& F3 g! H- T6
    . p. c- Z6 v" T7 c% [4 Z( Q- ^& o7  ]0 F9 \5 n2 m/ h- \8 E, ?
    8% }; `2 \2 @! O3 q
    9
    3 _9 |( D) y/ E/ C0 s- G/ s; a; \2 [10
    ' f6 B. z' Z5 U: R11/ b7 P! Y4 E# [/ H6 I
    123 O/ K4 N+ K! q/ p, |
    132 ]5 t/ |- v, Q: }4 u# {
    14
    . E* M6 H9 T& p/ T" X15& o0 M5 {6 G2 X+ L
    16
    8 x( r' n3 L9 x% y# V, k+ Opython除了做爬虫数据采集,还可以做什么?: {6 `9 G& Z; F( w" H4 W& d
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)2 I0 f* F8 g% N* l0 d( {

    ) k) s* e+ d' a  n2 B  ]+ A
    - y$ M4 i/ E3 o
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    4 u" s0 D6 I, j2 `# Y比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    + W. r1 A* j9 n, {; m" Q/ O8 \我可以做到这样么?% }, S3 N: e2 ~2 P' U$ ]1 q, |3 T. f
    0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    " f5 a6 M2 C0 s如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    * j( n- K2 h% X$ K" J% S
    , A8 n" ?% _! X! x

    , |% g! R+ ]. R2 ~  j8 E( J0 y爬虫开发(脚本)(就业/外包) 可见即可爬! T1 E/ N4 f& S+ V" p5 C# d
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!$ x( G( ?- N# b2 U
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    1 k5 V2 d8 V0 ~6 ~6 C之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!& S/ R$ P  t5 A: A

      Q4 y, I2 b2 H5 ~- p; o: r7 f5 ^& \9 N

    3 U$ V% w: h, c. f) ]. G: e数据分析(就业/外包)
    " z5 h( d% O( u9 R9 _* ?9 M7 f& r0 V, @

    1 y2 k% D/ M1 D! s: [- r0 X* z自动化(脚本)
    - \6 ]' e( U: N# S
      K/ y2 _( {( K" `/ d4 l

    . Q- M# P7 [1 ]9 ]( a, y' B1 o游戏开发/辅助(脚本)6 L' g3 z6 C5 p3 |$ H! n
    + P" @$ F' P" F. j) D
    4 ~' [& S7 C$ ~; ~1 a7 w- I  t
    人工智能(研究生以上学历 要求很高)$ }$ C. C9 \4 B* j7 H

    # l7 ~' v' {' `* x: F7 |' V
    6 W3 o! v  n  A' e7 D
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
      S; C5 K% l; o* p  v! K0 x0 z+ \
    + U' @8 v) @2 q; q0 `

    7 k: b+ r6 ^2 a: q- g我们开始正题吧( Q: Q7 l. N# i% N* u- L, t

    % u% [: O5 _. ^) Q+ m

      F% o, ~2 T) V: h' u: m5 ^爬虫部分:" K' H* M1 E  S: f% r+ @
    发送请求 第三方模块 需要pip install requests7 I4 D/ v- [# U' ]. s( |, }

    8 y( h0 ]( r" n, U

    0 S/ r; E4 p1 D& y2 |import requests4 l- J! o4 p* f7 g* o3 |
    import re  # 内置模块
    , [0 ]0 ?. N- l1 h' g
    ( N9 Z' f9 }8 k# Q$ w- F3 q
    4 e* L+ A- G' m0 r" ]: U
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'# I5 R9 z- v% _# N9 K6 T6 ^" T- B( S
    14 u. J* S. M, I* j  U$ I
    2, q2 `) s4 d+ n) t4 c( S% Q
    3
    6 R  M; x5 n& }9 I" n* N- `+ A. @4 r4
    5 Z$ E* z+ v* s) h请求头的作用就是伪装+ O' ?3 O5 W/ |. b+ G$ x

    5 u& _5 `0 ~0 p& I2 @& D

    - c, E+ `! q/ H. W2 p. Sheaders = {
    3 ~% E2 m& {0 o% E! H% S    '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'- ?1 P% J8 B$ d0 ~3 Y5 I/ U
    }
    9 D7 k$ M3 V' l, u( y! K6 c1
    ' K# E' [1 P! B2
    ! v) F; w- A$ a: @. {30 M3 G# J4 o& q$ T7 h
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    8 @9 S* {2 s0 n. J5 K( h. ]2 u函数传参+ y% t4 N0 F7 R: y% Z
    . N+ R0 k$ Z1 v" _0 V* r6 \% k6 c

      {* f+ F8 B6 ^  nresponse = requests.get(url=url, headers=headers)
    0 M1 M* ?- h+ U6 `. J( y) h1
    1 T) L4 g- S9 M2 [2 w  |<> 对象 对象意味着你可以调用里面的方法或者属性0 {( _; e8 B; \# }: n" W
    200 状态码 请求成功
    , F9 @( s  [6 r( G; R- g获取数据 文本数据
    . L: F% @% q- T+ `# G1 q0 q# e自动识别编码0 B, T/ Y+ E- Z
    ! s& `, o) S' v' P1 v. z  n$ o
    0 X) L5 ~. z# t& o4 x- P, q3 x
    response.encoding = response.apparent_encoding% P) s9 U; f1 E
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    $ ^5 ^4 _' Z7 d% ~  k) I2 J; O1
    . m! I$ q9 d, j! w2
    $ ~$ i+ \8 `* z; Jcontent_str = ‘\n’.join(html_data): I% D4 u: |/ a1 f* I$ n

    " r" u# x2 i1 E% l* ^

    - R' A* S7 b0 P& P9 l要列表转成字符串 ‘’.join()/ g7 Q6 g) v3 k# O) g# L- @1 z7 H
    for 遍历+ O7 E* W  K# R% L. _: W
    保存数据 保存字符串
    5 x5 L2 c4 z  ~9 Q2 o  p! `for content in html_data:
    ; Y  c3 z7 J; g/ r- m+ p5 n7 U    # mode 保存方式 w 写入会覆盖 a 追加写入
    4 b3 U% ?. V' M    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    / C$ l3 ]1 L: E1 d+ H; I, U- `        f.write(content)
    & U5 P6 s. s, l6 C' Y, K* C$ O        f.write('\n')8 @; S  R3 H- Z, K* [

    " i1 n8 j0 O8 c9 r' N  u
    ! q$ ]. V% h9 j. `/ K
    # print(content_str)1 T4 C% m: b5 K6 O4 u# ^* Q/ e
    1
    5 Z. g8 t8 u6 o+ [7 k) g8 E2+ x% g$ p8 o6 {& j2 c9 e$ W7 U( d; c
    3, e1 B7 P* b' K
    43 `* k/ Z$ e/ D( C) f
    5
    8 p9 r: v+ m! w& u1 _$ }6( B5 _: j$ d9 ~
    7" D# P4 b/ A" m0 ]+ B6 N" V
    爬取结果  G2 r# \5 |  G: K# U, }
    ( ?4 [, m. n1 D0 L) m* N1 s. I

    : Z2 H5 W5 k, o: k3 c2 A
    " g8 E+ ~( p, u! {" D4 p0 R
    ; ~2 A' u5 V$ F9 S( g0 \# Z
    然后我们再来实现制作词云图部分) G2 m; \) a" o* t" n" a
    1 [% m& E# i! I; }
    . E0 W& y+ x8 K
    首先要安装这两个模块
    6 `% B$ s% `/ R2 V- \3 ~! f
    ! i8 h2 f0 O4 r3 M/ a

    " h1 b) S# w$ l( b, U# i& K  jimport jieba- e+ a- N! a6 X, Y
    import wordcloud
    : _% p7 {- w" ?. W$ k2 t1
    + _  u* Y! Y) s, F/ |* F8 ?% R2
    . ~) N* K; k) ^( B( H5 a+ @一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    7 ?; E  B; V( A& o: Q! U- w( n1 I0 g5 V
    $ y) j. q3 k. q! \& @
    f = open('弹幕.txt', mode='r', encoding='utf-8')
    3 v  s4 V, T+ `1 k; l( @text = f.read()% q: b( l6 `' m. s. d1 C# x# R6 V/ c
    txt_list = jieba.lcut(text)* a$ @2 O6 W6 h- M" A8 F! X5 I7 L
    # print(txt_list)
    + @$ F5 B6 y) u0 R16 N5 E4 n1 F/ ^+ [4 A% j: A
    2; `3 l/ A% V* p& u0 x
    3
    , Q8 t; A5 \1 s4
    / I: f: [7 p. ~8 _6 T1 Z& I. ?列表整合成一个字符串
    3 Z  L/ {4 G5 D+ s) R$ X4 ?% n3 Z
    , e* c8 D3 e( F0 u5 [$ F" v9 ^
    string = ' '.join(txt_list)$ p+ U4 s4 b- K- k! G
    print(string)% i, u" L6 U9 C! b& K
    print('---'*50), k7 F) O& @' W1 o+ z( b4 w3 e
    print(str(txt_list))
    2 q' o: m- \: j9 C18 W5 Q1 M! L) p' L# C& J- w' ?+ x
    2
    9 l2 ~; l# x5 B3
    % g$ [+ j( C  Q% @4 ^5 x: c# Y; i% H4
    7 T+ x% L- B# `3 R! M& p& }3 T词云图设置1 f$ b0 a8 I1 G! @5 y

    9 K( H& Y3 X; c  U: c

    5 J- b2 W3 T# ?0 ]5 L% }wc = wordcloud.WordCloud(
    ( |, l9 a3 m& l! H$ C# Q/ s3 f        width=1000,         # 图片的宽+ U! h  X# l  U
            height=700,         # 图片的高: Y% |# ~5 L1 r
            background_color='white',   # 图片背景颜色
    ' Y6 O0 `8 l" U        font_path='msyh.ttc',    # 词云字体
    6 Z! J, Y9 o( x, E        # mask=py,     # 所使用的词云图片" R% R1 l. S/ C$ T
            scale=15,) Q2 _5 q7 i8 M7 ?$ u; [+ u% x, @
            # stopwords={words},         # 停用词
    4 ?. v8 T) I' d        # contour_width=5,  ?+ H- a1 |. B  m
            # contour_color='red'  # 轮廓颜色7 i- ?2 G# Y: \  W  s3 c% J+ ]
    )
    4 q( E( r6 [  M0 Z/ y1
    % V6 d9 ?8 a# F9 D0 f0 K7 `6 m1 p& |21 U' B. H) C- S  T: R. ^
    3
    5 y7 y" X7 T) k0 W  z/ Z! T4
    " d9 F0 p8 ?$ q59 J% B4 x' K: Z2 K4 ~2 D1 V* ~
    63 U( B! \* ?$ t! j
    71 A7 ^: p& a, ^# y) }$ t7 S
    8: d/ ]+ y! k2 O0 J
    9- J1 [, z3 d8 G+ A+ ~# `7 C, H
    10
    4 \* v* l) e8 }+ A/ T# x11
    7 ~. u: ~0 o9 Z3 f+ ^5 \给词云输入文字' b# _; c  E( p4 P& e
      [% x- y8 m& L( ]% l' G+ x

    ( s5 L8 t' z8 m. }. ^wc.generate(string)4 O3 x6 z" s0 L
    17 h1 H6 K9 W* h: S
    词云图保存图片地址
    2 D+ k$ |* {* h7 V' H. Z% I
    7 F6 j! ?' y' \

    / x$ E, A! }& M+ k6 ~4 Lwc.to_file('output1.png')
    8 w+ x- D* \3 k! E1
    % z$ s5 G# E1 W, T! s词云图的过程中有点慢,大家不要心急8 g: w, y0 h- m) B! k
      a8 k- v% I5 V+ r. u
    1 X+ d, |% U. U* U: R4 y
    这是最后的结果; f: B5 K, w1 X: F
    0 @0 ^. Z7 w  I$ z. a3 i( t
    4 y" F; c0 @* {& K: Q
    没有加停用词,所以一些无用的词比较多- U. ~# K8 ^2 S) [* ^
    6 M5 w- ~7 d- e: k( x9 c6 u7 s* b" a
      Y/ n  G) M, l, `  `$ ?0 Y
    stopwords={'了', '啊'}
    " x  r1 s; y) n1
    8 }% n# v- ~/ K$ ]3 R0 g- o5 ~把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。% z( L% E! `* v! i5 X& S% A
    我们再来看下) Q3 S* U0 |0 y& D4 F' k9 ^1 P9 i

    0 Z+ c$ M; M: s* @% V  n8 [
    % R- N# H/ B4 s! I% g: A* D* Q  E
    不知名网友:666666 牛批 老哥我要学!!!
    4 F# {! A( g# }" A8 y! }2 {  l/ H# O, k! f% z- l8 W

    9 y+ Q2 b/ n; ?6 b
    * [* C$ T) x) t  }9 {! A  i

    8 g3 W* R& g% R: x————————————————$ k( |9 Z- g$ U" I
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    " Z2 x0 |8 [; S8 S) a0 a原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    , y% L2 }7 R9 d6 s  a
    7 ^) l! u3 w0 y, S+ y" P) J: x0 x& U
    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-27 03:40 , Processed in 0.325609 second(s), 51 queries .

    回顶部