QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3149|回复: 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
      {4 H2 k/ z  r5 U
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    2 K* K( h6 x2 q6 s1 A今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    , h' \) m" Z7 l1 e. \) [" b3 g康康大家都怎么说!% Z* @' r4 c2 b3 M% X& g% H( V

    + u+ D8 Q- a" |, m" W: l1 l
    - i! D: X1 ]% R
    0 ?- X* A+ X9 ~6 E8 f9 A' U- o3 g5 a1 e
    / F4 R0 [7 C: k1 B; t
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
      J) S2 R1 B; F* j- E0 T% K( q5 q9 r2 C( Z& q2 ?3 Z
    " `  f9 P; v' F; X+ F/ r
    如何安装模块:
    3 A- c& O* Z8 x1 p3 @/ \; R0 Q3 o# |$ b0 I% A( p1 P3 q
    . q0 p5 B+ p& p5 `) r+ j( n
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车6 G& ]# ]5 X! {% V# o7 v; G
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
    " r: l: N* [& o* t" g如果模块安装失败了,可能是这些问题:
    , t6 p4 M& w% V' ~9 P& A4 Q) X9 ?  }9 T2 n1 K1 N
    , G) y, s1 a6 y1 w# ~& {& H6 F! O: ?
    提示:pip 不是内部命令# T& {4 I& F0 k6 D
    你python环境变量可能没有设置好, Q9 K) C5 }8 g7 j* K
    有安装进度条显示,但是安装到一半出现报错了
    $ s$ S8 I; ^0 \/ R& b5 E* |1 [因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB3 ]& ?0 ~! Z' Y  d
    read time out 网络连接超时 你可以切换为国内的镜像源
    6 F. S, Z2 P* y明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    , x' _! E% ]% |6 T8 Q' S你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    % `6 D  l4 i0 {7 z9 s可能安装了多个python版本- d3 w3 d+ v+ b: ?* T# U& J
    安装一个版本即可
    & N" Z1 \3 V! A3 nPython做爬虫到底可以做些什么呢?
    $ L2 x% [6 n, q9 v  K
    : W  k4 T# t! Q# z) \
    8 S4 H. E" k. ~- y4 t
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    - v+ R  q0 q5 l' ~4 {12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    ' O" Q. v" j# P7 x可以刷课 可以刷网课 自动 还能自动批量注册账号: g) m4 C3 v/ I( T+ v9 E0 N
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    " Y) ~: S2 B& A6 I5 U9 U' p% v普通B站视频可以爬 番剧是需要会员的
      t6 v; @$ [1 V( d% o( r! {
    - K1 h  Z% L5 l
    " K- C6 W- U9 K& k) ?5 G' k# F
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)9 h) X9 K- K+ E. d* I( V
    - i* T# W0 b3 Q1 F

    - |; [, K  y6 k6 t% j2 c1. 确定目标需求 (弹幕数据 那个视频弹幕)! I$ q% |$ F, `9 Y" `6 Q
        确定了
    ' ]: Y$ R; R8 v, N7 V1 B2. 找数据 (数据的来源分析)0 j: I8 B% C4 Q8 K' e- [6 u
        简简单单 找到了
    $ o' N" H( V" R5 N) m6 N2 W3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)$ [+ O) c" b+ l, M
        请求方式: get / post8 Q" }5 g+ d( q0 i& \' w; C
        请求头:
    0 A3 E" G. z+ ?' q- T    https://api.bilibili.com/x/v1/dm/list.so?oid=3762001960 S9 T/ a/ b' Z. E! J! ~
        (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
    5 h$ U- W' ^8 o: `0 ]; q& j7 I5 h4. 获取数据 8 r7 o% {. X  k3 Q1 z  S& l
        文本数据 response.text 获取网页源代码
    , o& l2 \$ N4 T0 C: A. `    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    1 R0 G8 D- i3 p, p% P    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    ( c' E$ w" U! M5. 解析数据! m1 B5 i8 a! \' O9 I1 i" q. p' w# y" ^
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符
    $ c3 ]! z# ]8 E; q5 N( H: d9 s6. 保存数据
    0 s2 H* s, {/ X/ l6 A1
    & B0 ^7 U7 b9 d# ?" l20 V$ k  l" q. Q, J: ^' _5 |0 v
    3, z* e2 K7 O- l2 b" ^2 _
    4
    - g; U; e5 ^7 z# D9 F5
    8 G' N% P* d6 \! i; v) C6
    # I( ~5 U9 `6 G! R8 t7
    2 Y" P7 s) i( y2 m8 }' K2 N8
    $ V8 f1 X2 L* Y90 k" H7 ]6 E# V* \" }8 g; m0 S
    10
    0 }3 _: X1 d+ ], D+ W+ h; Q11
    9 f: K- O- K  v! S! H0 X12
      E3 w5 t0 M! \- \: J13  ~% X* e- l: L, d" Y% S! s' e/ ~
    14+ C: G% X7 j8 i; \# z: A
    15* n7 m/ G+ b3 \3 d
    162 T: Q( Y( Y- X$ V! o
    python除了做爬虫数据采集,还可以做什么?
    8 c  U* g. E$ ?* y' d兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包). m0 O1 N; O  j. q9 e% o
    & `1 s4 t6 l: k2 l( E4 ^
    1 U& U7 j5 M4 b2 t/ ]: L" y
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K2 w  I) J; Z$ q" \6 a( e2 Q
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    , I' ?- J0 W% f8 {4 w7 u, L我可以做到这样么?
    0 B: z9 R4 x. L% e0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;+ v3 V! h% L* C$ v2 o
    如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    % z: E+ J% Z  p4 j: @: z
    : R# d6 I9 U; t. S1 @# p' U$ v. m

    % A9 _/ ]$ ^% S( x, \" L9 j爬虫开发(脚本)(就业/外包) 可见即可爬1 Y0 d, C' p& U% ?+ y0 C& R- d
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
    ' }# f9 O) Q# C6 q/ @" u很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!* n, g9 m2 ~8 f3 P) a
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
    " ^" o# {/ u: \. @* W! r- ~7 K0 U/ r. C

    8 M5 ?" g: I# \. y0 y" d数据分析(就业/外包)
    ' b1 T+ o2 l7 _3 R" N  i$ Y4 D2 ^2 L' f

    " u4 Q. ^1 H0 A0 H) y, S& F自动化(脚本)
    * i6 K4 R. p3 n& `
    8 V$ f! ~" S  {3 H5 T% S

    $ h' z; z& @; E' l1 L, ?; S6 [游戏开发/辅助(脚本)# H4 X; ~# ?, O: Q+ ^' F& p: b! L# ]8 r
    ) T- h1 I# y( Y: `" `, P
    " ^0 V+ d! [% u
    人工智能(研究生以上学历 要求很高)5 n8 k2 `& O# F9 {$ C" ?* ~% u

    3 H( r, R3 b3 x3 b2 ?, x1 y" M+ H
    / P( X% k1 ^2 t; q- S5 ]8 C
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。$ m! f" P+ R2 a  Z" J5 m

    ) t. x3 V' L4 V: M, p
    9 [( z4 H; x3 H7 u0 R
    我们开始正题吧; A' Q' L+ F% j8 i4 d. m
    % o$ {  N7 w: y0 X' }0 Y

    2 L  J  ]! r/ u, A" G8 A爬虫部分:
    6 F7 @& ]0 P+ D7 m! c( X6 b1 r发送请求 第三方模块 需要pip install requests
    - N# R0 q' ~/ x' X1 [% D) x! {2 i( w

    - P% O5 d3 l% z3 R3 B6 d7 \import requests
    ! d" F4 n& Y9 S8 C7 Wimport re  # 内置模块
    . r7 ?( I9 ]9 J( Z3 K2 L5 H# J
    5 ~- j/ c+ N- k& J9 Y

    ) y* v1 h" J/ Z5 [+ Yurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& W! s9 j0 ^/ _. o" X$ B5 x! J
    15 _5 b) t* L; S; i! m2 G0 U
    2
    . Y8 J3 w0 o+ a& g7 L% W3/ V2 A7 S$ C2 x/ c
    4) e" _/ j+ a, f* |# K1 F3 g
    请求头的作用就是伪装/ F0 t6 d' U& ~# p6 [/ n8 y

    ' g/ R& q* [1 K9 V7 R, a( Q
    ' c$ e* z% V7 i
    headers = {
    , \& c$ p6 e4 {4 ~: T: Q4 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'
    * }" ?' ~& q: I) R- o6 @  S}( a* X" }! Y) D4 C  z2 t6 v
    1
    , X( ~6 p! i) b2  T" x1 w# L& w1 c& L! y8 Y0 A
    3
    ; d% `# ^2 n$ b% f; f2 c* `+ T4 P模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据% a4 `7 S5 a9 u$ U/ M
    函数传参
    ( j- }, D  @" T
    0 L5 I5 s# \5 P% R

    ! |6 |" H2 f* C( U6 Aresponse = requests.get(url=url, headers=headers)
    6 z* h, K2 \' Y+ H1
    5 ]: D8 W+ K5 S+ V<> 对象 对象意味着你可以调用里面的方法或者属性" k- y. }$ K  ~- D. C7 l( {; U6 W+ ]
    200 状态码 请求成功! {" }5 L% \+ v' B
    获取数据 文本数据4 a, v. g+ U6 C6 Q; ]' y
    自动识别编码  {# L3 G* w* i8 K$ z6 s
    8 e3 B! O. g7 D

    * k- e6 L: u; V9 Gresponse.encoding = response.apparent_encoding* y& _' W/ r1 ]/ T: s% D. `
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    4 W$ A  T5 _& P/ [! k$ E" o1
    . {5 F. V  P" X& C2/ X6 D, \! b. D" R( s4 l
    content_str = ‘\n’.join(html_data)( T, v' ]" ~- F6 h5 l

    % f8 A! P$ ~$ t& P8 h

    # G( u, ]) C* D' K, G/ }/ A# @要列表转成字符串 ‘’.join()1 g8 F6 q2 {6 W) f0 Y! s4 o9 A
    for 遍历$ F1 C9 R2 T& h  |7 o9 [7 Q' C
    保存数据 保存字符串( r$ c* o2 Y7 C. M# n
    for content in html_data:
    / X# K0 ~, @9 q/ `( A    # mode 保存方式 w 写入会覆盖 a 追加写入
    " h9 K1 a1 h  ~9 |/ W    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:' {8 G3 z. T) m
            f.write(content)
    9 H: p8 R0 t/ O4 X        f.write('\n')2 d1 D- L6 b% l& f
    5 Y7 ]0 {9 u* S6 B" B3 Z- u# x
    8 b: z* b1 j* U8 X8 @% u) V; L# S
    # print(content_str)% V& X* X# o6 k; O! R& Z; ~7 G
    1
    & B4 m* c$ w7 L7 E/ l3 l8 e& _2; W( P$ \, v3 o, U
    30 E% |, \: U; I1 X' S0 M  p
    4
      P1 a0 c) U3 Y. n8 i5
    * K8 }* S) F0 M" B; h1 r( j7 s60 Z: t% w, I) g; W3 X
    7, K% J; ?" R1 I7 `& j2 K
    爬取结果" q+ t- {/ s/ B, |9 D
    + ^" Q  n  p$ b! T0 D& n- Q

    ( x) Y( {: j/ b) H% I# W2 u! y5 r" Y0 c6 u

    ( Z% }& D& a) a  j然后我们再来实现制作词云图部分6 g4 o3 @2 f$ Q/ K% J

    ) z/ D: j. F2 c% w4 V- C- V; w! O" d

      L/ G* z1 b8 F# r  j7 m/ L: h. G! l首先要安装这两个模块; T( ?  C, x7 U$ q: [8 D+ P- h
    , t& Q6 ?2 h& }; [5 ?  x0 Y  K
    9 y7 C; e0 [  S/ l( U5 H
    import jieba9 _1 H5 `0 n- V+ Z" x( _$ B
    import wordcloud4 s' R, b- a6 ?5 G' r( Y
    16 A( h9 V. f: U* k# `
    2
    9 K# \+ K' c/ t& s$ R& p一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    0 p1 U) \3 v' \3 H
    1 J6 h7 S! w+ S) O/ p  z+ x
    ) N; z( X; U$ \: m# R6 J
    f = open('弹幕.txt', mode='r', encoding='utf-8')8 I5 U- i9 e6 [+ R& p( B
    text = f.read(). B: e- _1 ]# Y# T
    txt_list = jieba.lcut(text)/ m4 V7 o  L6 i$ }6 s% P- ?9 D) l
    # print(txt_list)
    ' H# a" c1 e$ o$ g1
    $ h/ p7 _6 y  ]" Y& X* z& K; p& a24 `; B! J7 k) C3 ?
    3, w" V% }1 i$ t1 c; L, h
    4
    1 {. v- |( t# W5 {- B+ P# g0 q列表整合成一个字符串
    / q, s- i/ j0 l) @5 @" U
    % Y: q" M1 F9 B

    ) S2 D5 C2 V+ G2 ^" tstring = ' '.join(txt_list)
    , Q# Q8 Z5 t3 zprint(string). E0 E6 n) C1 P0 i/ T$ Q+ t
    print('---'*50)6 S' W+ L/ X5 }( e: c1 Q
    print(str(txt_list))  s: @6 S( z4 o, M# _6 p4 V$ Y4 Q
    12 e5 Y! J" ^. S% n7 X* M
    2
    * a6 @( G  \. i" Y) s1 J33 a1 v" A0 v& e" D0 D( D( M
    4/ n  n8 i% G- D
    词云图设置& |0 {( x7 G' a/ f0 n
    + y; c$ {- \, a1 A4 c5 a5 m# B" E
    - h, q) U- A1 Q% ^% p
    wc = wordcloud.WordCloud(! w+ l3 I" J) T$ Z/ v( h/ l# \. t
            width=1000,         # 图片的宽3 m6 V; D- D0 n* n" ]' E' F
            height=700,         # 图片的高
    + E9 f  O1 H: w7 v$ `; D        background_color='white',   # 图片背景颜色0 s; c( g( l2 K
            font_path='msyh.ttc',    # 词云字体
    : X. B3 ]" b( W$ h1 {/ b        # mask=py,     # 所使用的词云图片( H  ^$ p5 ^& G( ~7 ~8 X
            scale=15,9 {4 ^: m. Z0 J6 n+ ~! B
            # stopwords={words},         # 停用词
    ; L2 [5 E# ]1 P0 ~) ]        # contour_width=5,
    ; N! L$ j8 L- |1 I7 x        # contour_color='red'  # 轮廓颜色% x: \* u. A0 d$ q/ e# n9 N6 L& W& e
    )1 ^6 p5 ~1 o3 s4 v% @
    1
    1 c( u: }1 k! u4 H7 N23 W/ D& {0 q& ^
    3, Q; `+ r- t- T/ b6 R4 k2 N3 b; k
    4
    8 N5 }6 A8 o% z- M! l/ ?4 A6 W5+ s8 t6 W' F; o$ p) r7 [- C% z
    64 |( C5 L' ^4 w5 C& @7 F
    7$ M, q1 Q; p, ~# v/ y, D$ Q4 i
    8
    $ ?) s9 J3 J( y" o2 @( }9# p, a5 I3 b" s4 f
    10
    7 |8 f& c: y8 ?; |, q1 i116 I7 i2 f2 y# L9 B) t5 }( C
    给词云输入文字
    5 x8 M  j/ k$ w! Q
    + c, K# v2 k; v1 G5 b" F
    & ?8 V$ d6 A) x  a
    wc.generate(string)8 |7 J8 S- T4 u, v
    1' F) l6 f$ |9 l. X; d' L. K$ J
    词云图保存图片地址! U$ i' d# x: o
    , }' l2 C! V* |' K9 R
    - ]% E8 a9 J( `9 `5 f6 v
    wc.to_file('output1.png')
    2 ?5 }3 a8 M8 S. x/ }' B' Y& a1
    . h# s8 t& l$ X4 Z$ U# q0 F0 A词云图的过程中有点慢,大家不要心急; M; a9 E7 n% o5 i# O/ n

    % o7 J+ s9 s  h) h2 e

    # d3 o2 u' {; n6 w( Y: t这是最后的结果
    ) q/ f& U( Q( ?% M
    . G2 ~: N  R. F' _/ @4 Y- z
    ! k0 h0 t6 [4 _+ `: @. o. Y& g" K
    没有加停用词,所以一些无用的词比较多
    % J$ q4 {0 N; W1 ^( U
    1 N. E9 E- [9 R2 G+ V" q

    6 I. @: s+ a, q2 n# _+ zstopwords={'了', '啊'}8 s, ^4 g2 ?" E, d( M& z
    1- `7 m' @6 f5 i4 Z  i: R: t
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
    0 {, F& C7 ?) O7 l, t+ y我们再来看下' J/ Q+ i+ k7 V# M" z

    4 u: T# ^. ]! F0 h* i. l; E# {
    9 z3 }- |9 `+ M2 N  }& {
    不知名网友:666666 牛批 老哥我要学!!!# d4 i9 S; c$ V; s0 m

    / M, U- L# H7 P+ `" \$ p, P
    / ^7 o/ v3 X4 q0 x  j
    ) w9 H, \5 v, w- k7 C

    8 x3 C6 V( k5 b* f, B6 Z2 S————————————————
    * @% d  Q* l' e* Q8 {/ ?( _版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    $ F, n$ l" g! U5 G8 K, r" V原文链接:https://blog.csdn.net/ooowwq/article/details/119211907# \- c; U1 S% t2 L+ G* |: }7 L
    2 ?, i5 j# R2 {

    & E! }+ q! Z  G& A8 F
    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-7-31 07:08 , Processed in 0.410922 second(s), 51 queries .

    回顶部