QQ登录

只需要一步,快速开始

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

    & |' ~  @* l3 E3 `/ z7 Y- H用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    1 b- J/ g0 A( D' a) u今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    6 S- H* h+ C" E  u  E康康大家都怎么说!
    ; i0 a, ^4 l3 ]5 n  v
    + Z5 i1 j2 B9 p# i5 J$ X( v& a. A  B
    / T. L5 y& A  @, q; m8 F' l

    , m5 K+ E8 T+ V! i

    ( J$ L, h2 y/ _1 |. W: s6 K& u3 z+ i) @开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    3 I- `. ?8 s' k/ ~2 b0 f$ x& @: D- }+ I. B0 r" f4 r

    ) ]9 Z& b' ~5 n7 D3 A: m7 c# p如何安装模块:4 w% V0 S4 b3 m# [& p6 Y3 d0 |

    3 Q& [) b" X# j' o' j
    8 v* D/ w4 z% f* K& P* H; d* w
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车2 o* S4 q5 _' ]3 q6 g
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车8 _! O* I0 v7 o8 X
    如果模块安装失败了,可能是这些问题:
    - _; O8 W/ h4 w4 n7 C
    . {$ c" D: }3 u" j5 z0 h* D
    - T' n. |! O0 i" M! r' o8 d" p
    提示:pip 不是内部命令9 m- i* W/ C, d4 ?
    你python环境变量可能没有设置好
    / X# N1 h: U; s0 Z* l+ M$ n: i. W# F有安装进度条显示,但是安装到一半出现报错了
      Z3 C7 e& M7 G* O4 c! K$ K因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    * A8 {; E; X* Yread time out 网络连接超时 你可以切换为国内的镜像源9 l6 O. U6 w6 X
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块3 y6 a9 ^3 W9 R: c
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下. z+ b9 p: @% \7 S) V' N2 _
    可能安装了多个python版本3 M( h; }% D2 v! a1 j5 G- d8 s! A
    安装一个版本即可
    1 M) Y8 m7 H' A9 j5 N; l  nPython做爬虫到底可以做些什么呢?
    9 D0 y: }0 Z4 n  M1 n& G/ ^3 Q1 D$ y. G( |" u# v

    ! f; D9 h0 D( i& |' O常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    # `# t' V% N* ^( O1 X/ z& e7 f12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量  t- k4 ]) ]  R( ^# u
    可以刷课 可以刷网课 自动 还能自动批量注册账号
    ! \, ]. K/ K: s( {模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …: H, N$ C( Z  y/ I. v  y
    普通B站视频可以爬 番剧是需要会员的( j) _, D2 C6 i" k5 ]/ Z0 ~

    ; ?2 w3 u: s' e. V
    ( I1 e4 [8 Y/ I' M( @0 ]
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)/ |- `0 E1 [  Q  [2 J; i6 G4 Y

    # _; R( h* c: E# t- Q$ A

    8 b: x- r" H7 K1. 确定目标需求 (弹幕数据 那个视频弹幕)
    1 x0 K* p5 F7 Y0 ?. X    确定了
    ; y& k$ ~  s3 ^. s6 H/ d2. 找数据 (数据的来源分析)- t: a- E: T2 W1 R8 g+ l6 E/ L
        简简单单 找到了  o! v+ V% t4 D# V
    3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
    : @5 e5 [* W2 X& |    请求方式: get / post1 s3 ?9 A: A8 V- r
        请求头:
    # ^" }" s4 g9 [- [+ `' I9 s    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    ! H- A1 x) {6 O" Q! c9 O1 y7 w- M0 S    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)+ R$ n1 K8 \: E
    4. 获取数据
    " [6 B2 y' X1 ?( x8 _    文本数据 response.text 获取网页源代码
    ; x+ r7 U( f; w% N    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多4 G" }7 @- H/ p7 c* B* s
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    * E8 m% A  d2 b1 N5. 解析数据
    1 Q; x( E2 p3 s: D9 ^9 W    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 * ]' c( L- z* a# v
    6. 保存数据
    ) \8 t+ f8 G7 A' P) ^/ @% a5 k1  H+ s0 F' ]9 N) F7 `% Q
    2: S. S5 K  t( U# {& N0 n  t
    3
    . S  p1 U, @" z/ Q' w4* V& v1 m& p+ x1 i: I
    5
    * c/ S* X) o4 L6
      q9 X' L4 E% @; w. O7 ?' J7
    6 y0 A9 m/ V4 N; j+ p$ L" C: N8
    9 p5 q' [6 d8 y9; J( H) b% Q+ R( ~2 Z* k6 l1 E8 D
    10; o" n( Z; v. X, B+ D
    11
    ; s# D, V3 M4 S; ?9 d: C: z12
    " o" B# i$ y( L+ _$ [2 k5 e3 i" U13
    1 P  Z% M5 L# n( h8 r' }142 T; N7 x3 p$ I& J) [0 ?6 R9 [7 x
    15
      s; A, b, {& R9 l162 Q7 `$ z3 D. [1 r, d+ [& c
    python除了做爬虫数据采集,还可以做什么?
    " t6 f) S! [4 U! m: S兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)2 |* y# a2 ~/ y9 J+ [

    ( _9 X8 g& r7 U0 l0 S& U

    6 v1 E6 b: [4 D( H网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    + k8 ~6 l, k7 a$ S8 L比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    0 R7 j; |( Q% |% ]; q5 [- W( N我可以做到这样么?
    * E# D3 t# q, U/ K/ o7 h! k! l0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    8 r' s3 z' P7 ?) `6 c, p8 T如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    5 L5 {6 S  D0 X$ Y! q( d$ ?/ |2 S4 M% q; @: s
    ; K; V2 n9 x- X/ W- N4 ?( f; J8 g
    爬虫开发(脚本)(就业/外包) 可见即可爬
    ) X# [; T+ u$ o: _# g虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!2 ^$ ^; i) t7 C% j
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!7 L/ c: h$ j2 M/ S1 p) `  A5 d
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    1 C8 S! Q0 C2 n9 x9 J5 j! z; y. j. I8 s

    0 U+ q5 p; s- h/ r数据分析(就业/外包)
    . R! v/ b4 m# f: V6 ]/ O- e, M- p% l+ J) F8 X7 q8 {
    6 B! V" M7 _; h; p/ L' W2 d
    自动化(脚本)- c- w, N7 M# \( I

    % h! S6 R& N1 v# u

      Q, Y  G6 |+ g8 u游戏开发/辅助(脚本): K" `' q' Y( W/ D( w
    0 s! W: _+ s- f0 p2 z& f2 C
    2 Z" e! l( `+ t9 M( _
    人工智能(研究生以上学历 要求很高)2 G3 q5 U/ F0 Q1 ]

    $ ^6 ?) n2 g  y  s) M+ g
    5 e* U3 K' C* Z' |
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    ( b0 W* }- x0 T4 Q1 o# ?' v# @* ]# C9 x/ {- n

    , H& ]/ ]: C+ d' K2 p- x( o3 U我们开始正题吧/ k1 g$ P) h+ J- K

    % E+ S+ U, k3 n( D/ |6 X
      O& [2 i" ^8 V5 K+ A1 Y9 m
    爬虫部分:" N! i" N: W/ v0 K
    发送请求 第三方模块 需要pip install requests: d: v* m. K* v) _6 `- i( E/ Q
    ) K6 a6 u& w9 E; {8 g7 w
    ! p6 D) c( {& f% b( e
    import requests
    7 O: j& Z/ T& i1 Gimport re  # 内置模块
    ( r* ^' C! s2 q
    / [* I) _* C- r7 X! n

      p( C8 ~: W0 x( D3 E( F" f: Aurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& m# k1 B2 g0 W
    1
    9 ^: S. \' O& \! l0 Q  P) Q. d4 ?: y29 Y8 D' n* J- F& R/ w: f' a4 I
    3
    5 |! R+ w9 h% o5 n4
    3 U7 @2 ~$ u9 ?) Q) _( |" O请求头的作用就是伪装/ @/ B! t: v/ u/ K
    # K( q; B) x7 b) D8 E) f4 t; A

    : U/ T8 H+ Y  A3 h& Jheaders = {+ _0 n9 U7 u3 }& L5 A% Z/ {! @" 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'
    + M2 _: R2 s1 ]# k$ i" j}
    / J. n; Z( J$ d# ?6 H& |% ]1
    ; z. M0 W# o" f: o8 i, s5 w2
    6 ~' ?- t" M. p5 N; {' r1 |7 C30 p6 b# U2 b; T
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    6 D3 w4 I% z/ [  e+ @' B0 M6 Z  i+ `函数传参
    - a$ G, x0 Y1 ]' `" p. N( r6 R* ?1 S  L6 x1 Z" g7 r# E

    : V+ R+ {7 Z% F! H& Presponse = requests.get(url=url, headers=headers)) R& [0 Y+ K! L2 f& ^: p3 u5 }; q7 T5 b
    1. y" l/ w- M/ N: |& f
    <> 对象 对象意味着你可以调用里面的方法或者属性% N' l6 w5 [- p8 K7 Q4 E
    200 状态码 请求成功6 Q2 \' d% p8 u; H; i
    获取数据 文本数据
    ) l1 {  ~& L3 l* N自动识别编码
    0 J2 y9 ^* f& I* C$ ]1 w* s7 i& J" t! J2 _% d
    % U) h( x% @. P) q* D6 i
    response.encoding = response.apparent_encoding
    ; L; O- u' ~* _8 T5 Thtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)" D- G! D  h) |8 u2 S& X, F+ \7 R
    10 r9 o- z! F- t6 c: e& d) x/ ~
    2
    ) _$ H5 Q2 x. Econtent_str = ‘\n’.join(html_data), |* f. }3 k! o( T3 C

    % U1 o5 r) g* E9 T
    " P9 J7 r3 T4 v! T
    要列表转成字符串 ‘’.join(): ]8 d; ~* J- E. Y
    for 遍历6 N( G; c7 D9 G* M1 {
    保存数据 保存字符串
    6 q7 ]5 k) K* Lfor content in html_data:
    0 k8 z4 J8 P% I6 T9 G    # mode 保存方式 w 写入会覆盖 a 追加写入0 S% |. S8 L$ M2 D+ g
        with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    3 c8 b' c) T" \0 `0 i        f.write(content)# }7 J# d4 z0 p5 D) I, l4 b
            f.write('\n')4 r) Z- d3 N# |3 ?$ e- R2 {, ^, m
    0 Y7 K6 \) x2 I1 O

    8 K( M* Z" `0 t6 W2 c" X4 N# print(content_str)
    ) p& O; B( u) X8 q1 O' B& r1
    3 B; v  F9 \9 i3 j  g2
    * |; p* C, ~/ j0 G6 V* `3- m3 u' f: g8 V
    4
    & D8 V8 u6 @; t2 [+ c* W$ v8 F* l+ u5
      |. U9 {* ~, S  S" u9 y( G9 S6
      j4 F( N- Z* g: D$ f7
    ; x4 O4 z2 ~  r% _爬取结果* T9 A4 D5 x& K* m& z7 Q
    5 o/ S! r0 @' B! j

    - ~6 n% Q; z/ U5 z) r2 ~7 Z+ |  |8 _  j' w

    3 g- f$ |* U5 Y8 {然后我们再来实现制作词云图部分1 G+ v# g1 m9 B0 Z2 k' v
    # B9 }) Y+ e  u9 |

    ' x1 k* j$ f7 \4 d" }首先要安装这两个模块
    8 U0 \& u, c$ X, J* E: e  n$ F9 j# W1 ~/ G4 n
    6 P2 x0 x8 m0 o- H
    import jieba/ [& N5 i* D  z1 G; P
    import wordcloud
    9 e4 t, i2 @& w* @. p& A) l1 ^1
    2 W' K6 M& J" T2 A- L2
    / h5 F( O$ @, a8 k+ @. ^一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。% `( i# x$ c+ p" Y3 h$ |

      ?+ b! {& j. U7 p9 G" P# }9 }

    " t6 j. t7 P6 \; V+ E1 n% G5 A0 of = open('弹幕.txt', mode='r', encoding='utf-8')) v" f+ n& I. [; `$ F
    text = f.read()
    . r# v( I6 E1 f1 z2 Q; q0 atxt_list = jieba.lcut(text)! Q% ~7 Q2 e( W9 S& w: {2 I
    # print(txt_list)
    5 e, d4 d, l( f( t/ Z; S14 k: U4 R, r2 o3 j6 R
    2
    7 A: l  A* q+ L# F35 |& E+ o6 z. }! Q2 l5 c, h
    4
    1 X; |( k0 v4 M0 P# L; r列表整合成一个字符串7 G1 F" T$ j+ }" Q; u
    5 J$ M: Z2 q! s
    4 A7 e- {, c, s1 r$ ?2 b
    string = ' '.join(txt_list)
    - G4 ]/ Q0 [$ P4 o0 d' V7 m+ u0 uprint(string)2 I" l0 v0 ], a" v1 F( g& X
    print('---'*50)! I( i1 V; g. W3 E  \5 I8 \0 M) T/ ^9 {4 X
    print(str(txt_list))* b2 u) ]$ J7 f; \( u
    1* E; S. k, I: n: O& f
    2; V1 ~9 U& u; s( ~1 ]+ K
    3
    ) A! ~3 H0 P, ~4" `) W3 C# Q+ [, r) o
    词云图设置% q& r# o  m( `# l6 Z% N

    0 s( k6 X0 i; k% i. t+ P3 x

    ! y( V0 z) Q0 A" o) t. z( L* @wc = wordcloud.WordCloud(
    ! O4 S' W/ @& B, C0 w  e& |% r+ P, q        width=1000,         # 图片的宽
    8 N, b' G7 G9 _1 \: g        height=700,         # 图片的高# R$ H9 l! R& S+ f/ I
            background_color='white',   # 图片背景颜色1 _( S; T: v9 Y% j/ c1 `3 ~! U$ Y/ i
            font_path='msyh.ttc',    # 词云字体: {& ~; j' |' }) q& w/ O* m
            # mask=py,     # 所使用的词云图片
    ) i+ ^' y  `4 _0 y' O0 t        scale=15,( ?; F. M1 w; c0 F
            # stopwords={words},         # 停用词
      D5 E' ~' ^. X9 e9 D. A" U0 d        # contour_width=5,  V5 O( S, z, F0 e. Q
            # contour_color='red'  # 轮廓颜色
    $ e; G$ c+ Y, k2 R1 `: S0 x)' P# i9 j1 G) {2 W4 d
    1+ }8 w( Q- _. y* Q' j8 n( O
    2" ^3 ?3 L" A& ]  T
    3
    1 Q. x, Z' {5 E1 G4+ P! {$ W) f/ h  @' K
    5$ W; k) n1 }8 K# K# p& Y6 ^9 |
    6! |' Z  d1 O8 f' ?  H: T
    7
    0 M( g( B$ H: H5 R1 q8# ~" }6 R8 ]; }% E
    9
    " C5 c1 ~* z, c4 @+ S10( s4 R5 e; U8 c0 w! J
    11
    2 T/ g  P9 t  F* Q给词云输入文字# A7 T, ~" P/ ]$ j
    ; J5 T8 \& I. m% K9 [1 k8 {( X5 v

    7 e2 h, M# k- O+ j4 S. V7 uwc.generate(string). u  Q* l; X! X
    1
    , b6 L1 j6 ~7 v5 P' k词云图保存图片地址
    " F$ l1 P% X! c5 S9 A
    % w0 i; ]$ w! j  n3 N7 f1 U7 M
    1 [. c' m* @3 Y# i- n
    wc.to_file('output1.png')  J  J+ C  N; G. y; J
    1) C+ O0 J$ J9 F2 O0 @1 r
    词云图的过程中有点慢,大家不要心急
    , y) ?* u" \. J  C) {0 r/ ]4 @2 ~4 {8 O9 b) ^9 j

    - _; d6 ~- l) H- F. {8 G/ v/ b* k这是最后的结果
    1 b( b* a0 g# [7 h+ E- G$ U. K7 J* J6 I

    # R7 M! [1 s* P: B6 A没有加停用词,所以一些无用的词比较多( E# \, I- G% R9 v# d! y

    # C5 J( L, V% A7 \7 t
    . r, E' h3 u% a& G
    stopwords={'了', '啊'}# U2 Y# T4 R0 X( B$ H2 ]/ j3 V9 B5 o
    10 s1 H9 d5 M4 B. ?8 U
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。' H/ j$ \( g2 c; ]. e
    我们再来看下
    : z4 `9 b+ ~) q* d' k, ?; ^' u
    4 f- J, q9 x( K0 k. i5 u- E
    ! m9 C! X4 J1 x& w! O" o/ x7 l! b
    不知名网友:666666 牛批 老哥我要学!!!- v4 }! \5 V& F3 X6 z2 ~

    , X, ^( \% y: \! x

    $ q8 }/ ?5 [/ @' c7 O- W+ e9 U: L; ?! Y1 _7 Q; l
    " a" R( W- p$ k
    ————————————————9 f$ q  i* S6 e( c4 T  _* K
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 O' A  u9 e; u3 O& v
    原文链接:https://blog.csdn.net/ooowwq/article/details/119211907" x2 ^3 c# V+ `' x# z7 U
    & g1 y9 B, i" Z4 D" z( F3 O

    * v1 [4 g8 s  m0 ]
    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-7-17 18:03 , Processed in 0.276046 second(s), 50 queries .

    回顶部