QQ登录

只需要一步,快速开始

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

    ( r: h& t8 n- `+ A1 r* ^$ {1 t  `用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
    3 m# K( {: f' d% U( c0 G今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!3 E, I' u6 r2 ^# S0 H# S9 X6 U
    康康大家都怎么说!; U, T( N+ Y# }" {5 n8 ]

    ) P1 J% N: J' p; L

    " U: H8 x' R- j% i. c$ {# e* v! X4 J9 g3 U. L7 J3 W, _0 U
    * d7 ^8 }; J' M/ h
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。; k- Q6 v" r$ |
    # e4 o' n# W! J( D- p6 _' `
    , J( }- M+ x1 P$ y8 P/ N1 C& G  O
    如何安装模块:" e3 v* b; u! t
    ! ^; b8 @" Z' A: d
    ( ^# \& m& I2 y6 ~
    win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车8 @/ Q7 S( F# v9 h
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车, \4 I3 f' ?. s0 h* J# D' ~: p
    如果模块安装失败了,可能是这些问题:7 t! h( h( ?2 P& c% M" A4 v* \  d2 e

    - R& U9 f, U$ X

    4 w' k2 A' t6 B6 ]2 w提示:pip 不是内部命令0 ?! o2 S! f3 R4 k, f# p. ~) U
    你python环境变量可能没有设置好
    " K' @1 ^* U6 D8 K, q$ v) s. h( i有安装进度条显示,但是安装到一半出现报错了( `$ `2 ^& h& X& z# Y- e' ~
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    % R, |( A. m5 C) nread time out 网络连接超时 你可以切换为国内的镜像源
    , o3 B# m  X" s0 d3 c8 c明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块" H- ~( l8 |; }6 i
    你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    ( v( _/ x8 U1 T: w0 n可能安装了多个python版本
    " w4 ^2 y, d$ r4 L# Y% ?! y- ^3 S. O安装一个版本即可# A! R7 l2 {! }2 e: {! H2 w+ h
    Python做爬虫到底可以做些什么呢?
    ! ]7 z3 F7 l* z% t+ M* S, P8 Z+ S5 U$ p& f2 v( l
    ' {+ _$ t' U5 U3 ?
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    1 Z/ F# j; ?6 n8 J) S12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    . v! W! U0 B- V可以刷课 可以刷网课 自动 还能自动批量注册账号
    # P* D) z) Q5 U3 U$ g! f) Y+ {模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …7 ^1 l1 J8 W! j
    普通B站视频可以爬 番剧是需要会员的0 m/ H' O2 P( e/ ^5 p+ t
    8 ?, K8 P& S& o, H7 ]) d$ t

    7 U( j$ m' i+ \' o1 f9 `2 r& I爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
    + G6 f% k6 A, o! f# B; X  f+ _3 r8 N+ S& V1 Y; f
    ! o* U7 h% q. ?- A' n, Y, b
    1. 确定目标需求 (弹幕数据 那个视频弹幕); ^# X( d: P  v, @$ |9 W
        确定了9 J# p4 A$ ]9 w# o. D* Z* ?( @6 ?
    2. 找数据 (数据的来源分析)
    & W/ a4 [$ T; M: b/ d. a2 u: O8 x  j; H    简简单单 找到了
    * b4 m3 u2 K5 q  z% |" v1 P3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)7 X, s2 S% \- S! f4 L
        请求方式: get / post
    # `: Y6 P3 h  n1 w    请求头: 5 |7 T2 d' e4 ?! ]+ L/ ?5 p7 E& X
        https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    9 v. c3 d5 a9 L" L7 L    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)' I/ h" h. P. Z6 E
    4. 获取数据 1 ^$ l3 n: J* H" C+ N
        文本数据 response.text 获取网页源代码
    ( Q4 ^  Y1 w" r. L  ~* q    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多
    4 j2 S% I+ W" J- P3 D3 s7 B( a    二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    9 Q$ E3 V8 p, u9 H  q3 m; `9 l) ~$ Z5. 解析数据
    + }5 g4 g; K" D1 v2 m. ~( F% h    正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 ! D- L, `4 t. j
    6. 保存数据; ^( \% s$ P0 |5 R* @: y
    15 P2 k8 E4 X9 n. x
    2
    0 \; q1 o/ J3 |5 H* R7 X* `8 k3
    5 \- M8 U9 M" ^6 c5 \6 O46 O/ @, y& c- l0 Y0 N% p9 e8 r
    5
    0 t) A1 j4 x( Q6
    # P' v" G/ ]3 F* T7
    % Z7 ?1 C& i- R8! X7 J# d5 @. l, L
    9
    9 s& n/ _3 A8 ~* t$ P8 I6 _10
    + E4 F0 {+ n! ]) P0 r# Y11
    ( W3 z4 r. G' m6 g! K123 D" G& J! x# C4 l7 P
    132 G  Q% S7 I6 p$ p# p2 [$ p7 C' f7 R' t
    14
    8 s3 n9 r- O2 b15% }# y: U/ @3 Q! V8 ^
    16
    6 p1 X  j2 R/ }+ S& O  o4 [7 M8 i' Ppython除了做爬虫数据采集,还可以做什么?
    ' P% i# c0 m* W8 z' E兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)+ h' D& {1 J( w

    % B" {, @" u* J. [" I# ]% g
    ) M8 d# ]+ b4 P. S
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K# {$ E4 K. J8 c
    比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;; I+ F: x9 E7 S
    我可以做到这样么?
    ) A1 ]& N9 P& F$ J0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    ' H' {' T+ ]4 `5 \  p' p) ?如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    6 V; j+ O) {# Y5 `
    7 N8 H) i0 o9 ~$ q  B, A2 B
    ' U8 r5 v9 `' O  Z
    爬虫开发(脚本)(就业/外包) 可见即可爬
    ' D' Y$ S4 E6 L+ U虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!- m* V5 X$ g% Z) J+ l
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!: _$ ?3 X7 X3 F! c+ R
    之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!( G3 T1 N1 E. T, u! J" v8 v

    % k! @% q& J7 k1 |6 l1 ?4 [
    ) X2 l. b! C0 v% |( V
    数据分析(就业/外包): k# k; |: l+ y

    # I: D- u* Y" P# }; _4 `( U/ a/ S& s1 Z

    : j* U0 }4 w; S1 ?& c自动化(脚本)6 n% ]5 B  ^  t. x7 q
    ; _' Z4 ^1 a' h5 _: ~

    1 N1 t; |: T. F9 `游戏开发/辅助(脚本)
    1 l7 r5 t% H  H+ ]2 ~1 h. v3 P/ H" U/ P7 C1 J
    & Y/ G5 e& M6 I1 p, K+ f/ t
    人工智能(研究生以上学历 要求很高)5 X% B5 k8 y1 s3 ]
    3 n$ Y( k1 L% b; q/ r
    ! M! L9 E: V) q
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    1 R; _/ S$ n! f& h1 F8 Z
    2 R* d4 V6 E; W6 R0 @: I. {- H2 F
    ( k; O) v! a+ V! N, S3 O
    我们开始正题吧# D9 K. J# s4 B. d' J9 h" g
    0 W3 B4 g5 I! V9 B: t9 X9 W

    $ \" O, ~$ t6 O8 \) q爬虫部分:( I7 e7 V: V# D* `" W: G" d  C2 T
    发送请求 第三方模块 需要pip install requests0 I0 {4 }  d& |0 }

    5 P+ F( s) x( d' d5 n

    # p2 w2 m0 o8 C* \% T! Oimport requests
    2 o8 @- |' o! R8 p0 G5 q/ Cimport re  # 内置模块
    6 e1 V; k6 h' k/ J! e
    - k5 F. A4 N6 b& H, O

    $ V. |0 H" B( F/ j+ L' murl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'* E! @$ g' z  S, }, }- K
    1! k7 j$ M# J7 t1 Q) M
    2
    3 ]1 S( M1 \& t1 G3+ `& ~$ l: K. ^" G3 K. T
    4
    0 Z$ l1 l( B  G7 q请求头的作用就是伪装" _! t3 _2 o/ t

    & J' j- j+ W; A% j; V5 ?( K$ |
      S# ]: c( H% o/ b1 w
    headers = {
    8 F( M5 J7 \  z' J    '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 N$ g# s# F4 _}
    7 {# m3 l  [: J1 K15 r( I) C4 s5 @( ?( v0 ?4 T$ t
    23 a3 Z& o1 X9 D8 K" D' l+ h9 j
    3- q7 D/ `$ h" {7 m& N
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    , E& Q! y3 J$ L: c0 f函数传参  K8 e* S- ^, W$ [# T, k% Q
    0 u9 Z! E2 p' f4 I: [& G% C

    - s3 Z. B3 g9 Z  jresponse = requests.get(url=url, headers=headers)
    0 l+ J9 o5 B+ G4 F4 i- ]1
    , @, d% M" X& C8 Y" q+ \4 G# X<> 对象 对象意味着你可以调用里面的方法或者属性4 R7 V- S- X) U3 J2 [# i; n
    200 状态码 请求成功. ~% K5 `" ]- A+ B$ @
    获取数据 文本数据
    * p# c  m, L. H1 X2 Y, l6 _; M自动识别编码, V- j3 Y6 y- G- w  N

    - a2 T- s$ N5 z4 H+ M
    ) d! J3 f, [4 v( j+ V' k5 M2 m% I
    response.encoding = response.apparent_encoding+ W" b: v$ F- P0 e, i& \! e
    html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    7 n4 X. `4 Z* Z7 g9 X1/ t5 v7 Q5 C, m8 ^( X
    2
    5 J! D0 A6 B: g; _: [  c2 pcontent_str = ‘\n’.join(html_data)
    ' t5 }- l0 j5 Y2 m) {# Q
    6 ^# n& x: W) j, R* Q; E% C

    , ^) w( I$ g: E2 [% O& \: ^+ g要列表转成字符串 ‘’.join()! ^) K. |2 \8 L- e
    for 遍历
    7 r/ g* V" w1 w9 y1 L保存数据 保存字符串
    : x3 ]1 C" r, V& w, F9 @' ~; U6 p" E8 bfor content in html_data:; i& U" R6 o( _; G. e/ v
        # mode 保存方式 w 写入会覆盖 a 追加写入5 q2 R# S) K& E- X& X4 f5 g
        with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
    1 p6 `0 l* |& _3 o        f.write(content)
    / `4 a+ I. s/ m  z, m/ w        f.write('\n')
    6 p- ?* B' F8 c1 D0 ~4 S
    5 {) e& e2 _4 j7 @# V
    ( n; l$ _& O. ]' y/ F# V
    # print(content_str)8 O# @" u: u0 k- ]  B
    18 ]6 y) v  h; g/ D' P' I
    2
    % D+ }! Q/ V- G3: s  t' e: L: h) W
    4% P% f8 h, m) z; ~6 w. N" b2 E
    52 @/ |% L1 Z4 i4 u/ G& }
    6+ _( y* q" K! |9 [9 G6 i# a
    7  @+ h: l' B4 I* J! d+ m" Y
    爬取结果; z/ x" H: q# j

    5 H$ i: ?- y9 a; s) X. f
    / q& ~; \# F2 u# t& \' ~
    8 `8 [# [; o, x* j! ~, [
    " `5 q. g& q% U
    然后我们再来实现制作词云图部分
    9 O6 V9 ]5 A6 z/ T" [
    & f. C! n6 ~7 O% ^
    8 M4 J" P, x* X' A' R
    首先要安装这两个模块4 j- x1 f3 W9 v

    7 g: Q1 n6 A2 t
    7 s. }4 |) h" _# a3 c) Q$ F/ }  y
    import jieba4 y2 H" V8 E/ q# t$ g; G3 D6 ?# p
    import wordcloud5 ?" ]" z) z0 R' l
    14 S: }, N5 Q1 ?
    2$ e- F$ ^( }2 `. l+ w( k$ N1 _5 M
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    ; \& m+ ~+ B* A" N" M8 E+ O2 U
      R- r9 b; c& A- K* z
    ! E+ N# ]( C& c3 j  l
    f = open('弹幕.txt', mode='r', encoding='utf-8')- y& Z/ P9 G* \
    text = f.read()
    : y. ?! \( N! ]1 _. L, Dtxt_list = jieba.lcut(text)9 B2 X( v1 {4 w  A, U3 [
    # print(txt_list)
    7 H, K% `' s  w6 q1
    . U$ b, q- r! R6 }; B1 d22 b. g8 D3 P9 ^0 Q; X
    31 H8 K1 M) x1 _& G6 |* {
    4
    8 _, \  R% B+ i. p4 R$ I列表整合成一个字符串* R) n7 S; ]+ Z) T; H0 }6 t
    ; M* c& }4 T8 z( g

    0 r8 _6 B# q1 `* x6 vstring = ' '.join(txt_list)  r4 d% M+ Q! T4 }  R  J
    print(string)
    " x+ I" Q! h0 `- Xprint('---'*50)
    5 I# C( L7 Y3 g$ P" q, Zprint(str(txt_list))
    " d5 [7 n1 v: g$ y1
    - e8 i# t3 Q5 z  s7 |. _27 a! s1 `2 P$ J  [. F
    3$ |8 e; @( _) I& m: L
    4
    " j- L7 T) T, X9 P) \) e6 a词云图设置6 q9 t* ]9 `' [5 @
    4 S& e, y) z/ K/ [9 e6 f
    # v( Y) e% c. l! z+ u7 g3 C9 b
    wc = wordcloud.WordCloud(
    0 f( i( i1 ^& I3 j" V( B( ^        width=1000,         # 图片的宽
    8 F' r) a% q6 }        height=700,         # 图片的高6 z; F3 Z2 N) \1 V$ {! T
            background_color='white',   # 图片背景颜色
    1 V- T- m% j. R5 o        font_path='msyh.ttc',    # 词云字体8 i: S. T0 b+ b; Z5 e- O
            # mask=py,     # 所使用的词云图片
    - J: e1 i8 h4 t* P- p        scale=15,& |& P+ C! Z3 W' K
            # stopwords={words},         # 停用词3 Q! t1 e. }$ X7 n& C! w- K. }
            # contour_width=5,( X5 J, u6 p/ ]2 A) |
            # contour_color='red'  # 轮廓颜色
    + W- o7 i  `+ Z3 s  |)
    . q# b, s1 j6 ?+ I; L- k1
    / Y$ x6 C, T# i0 }- {7 ]1 E2/ @" j4 e4 E3 z, x. G  N% t
    3. z9 n. I; B. C; F  m& t) f3 r- R
    4$ o7 c9 Y' M$ ?" S. T/ @! x
    54 ~4 D5 V" g! V! G
    6
    8 V% L, V: Y" `4 [. o* E& L7# r+ |1 Q( z! R$ I. r" s
    8
    * S: J7 {  J. \7 i; o5 y9
    5 i1 s+ ?* g6 `3 j2 ]. u10
    8 b* Z$ x8 ?" \, @11
    / r- J: |& N( D5 t6 I9 ]# k4 i给词云输入文字
    1 H: ]* e- t9 i- a# c7 S/ `8 e& K8 [/ m7 A2 O" y6 x& i
    7 v3 J2 r$ Y7 |
    wc.generate(string)
    & A. i6 y, _" {" S! w, h6 n$ L: f11 Z2 t7 b0 I& ]$ G: z6 h$ ^: ?0 K! W! d
    词云图保存图片地址8 N# G$ K5 j$ D( @

    : t4 p. t' E' z! l2 g/ `
    1 M5 {' i7 ]- _1 x; s5 s7 z
    wc.to_file('output1.png')% o- i8 m" H/ s* @
    1
    # u$ E' v2 r3 J, b词云图的过程中有点慢,大家不要心急
    8 R4 D* T9 k4 @  m" `! t3 _! V. X
    % {5 E( X1 b: a0 `- u2 e& b
    这是最后的结果- s* x8 A5 N7 L" r
    / n3 U8 ]% x) ]1 n

    # a' J: z( S; @6 W( e) c没有加停用词,所以一些无用的词比较多7 {" K: `& x8 f  v) N
    $ a8 t7 c7 l/ O6 A% l4 s; E  ?
    " S7 A: C. f% O% }; L) H2 N
    stopwords={'了', '啊'}
    + B) }1 T8 g* n1( X. Z( i6 a  D/ Y
    把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。4 y, U9 m" [9 U+ o& j5 ^2 l
    我们再来看下% y0 v1 f  J, y6 g+ O8 |

    % V0 t! g+ M1 _  u; Y' R( I% P

      B7 O+ Z5 ]. [, D* `不知名网友:666666 牛批 老哥我要学!!!
    ! B) ?# r/ D. }0 K) y. J
    ) n, d$ ]1 w8 F& ]5 C% L
    2 W  c& a1 ~9 t/ n, |
    $ G7 [& r; I% s# w2 Q% y. j

    8 @' r6 `" V* Z: H3 W# c4 Y& x————————————————+ R* J3 q- {& K. f; D( z( W
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。. n9 w2 z( g9 G; R4 U
    原文链接:https://blog.csdn.net/ooowwq/article/details/1192119070 c7 i9 p  W0 N7 W1 e
    5 m5 ~6 ~& U7 \$ z; c& {% R# v

    # l& e. c6 C) ~4 \3 |! J
    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-8-4 20:09 , Processed in 0.448501 second(s), 50 queries .

    回顶部