QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3153|回复: 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 ~; |0 G+ Y* e" {9 B* W
    用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!* f+ u% @/ e0 d/ m- J! v7 a
    今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
    2 p( {; \% B& X4 _康康大家都怎么说!1 ]* p. U* f) e4 U

    1 K, H/ D# Z0 Z- G3 C) h

    9 a: C/ g) d( l8 Q% H' W* `" z2 P: e: s; I% U3 h
    7 v* x6 u+ }' m( Z" [
    开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
    $ i4 [# f9 V  \$ K
    * M) Y' o3 s  q4 C! j* |
    3 C& T, v/ Q8 m! _7 B" M
    如何安装模块:
    / E& \& M. @6 A5 i" h: T5 u5 q  R; |

    ' X7 J1 b+ o% R) P8 h* Rwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车) [3 y5 M& j/ K& K- |
    pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车  m3 A% z5 Y5 |
    如果模块安装失败了,可能是这些问题:8 `7 o$ x, t7 D# D! K2 j
    8 ~5 O% U% \5 [; u& A9 g; v+ n
    . M! A- g1 T( U! e& n/ |1 C
    提示:pip 不是内部命令
    3 h# O) _( E" J3 E& \9 g你python环境变量可能没有设置好
    5 j7 t/ d- ?/ R0 r3 K有安装进度条显示,但是安装到一半出现报错了; O+ }* `# |- A/ @0 r
    因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
    " D& l& y! h! x2 o; c$ Z( l/ xread time out 网络连接超时 你可以切换为国内的镜像源; U3 |# S% r: ?& A7 G/ j8 V- g
    明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
    ; `6 F0 m  s6 D你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
    * E* c* t4 q8 V( o1 F4 ]2 e4 Z可能安装了多个python版本; W3 S0 C1 e; j4 M# {
    安装一个版本即可$ F) }  @" J  {( g/ w- Q
    Python做爬虫到底可以做些什么呢?& Z  ^; k! z! Y1 j4 r2 O; b3 h

    + W* f/ h- O- K
    4 H3 F5 q& j7 U& C+ y8 ^4 |9 Z
    常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
    ( b$ ]( c* k- K$ t) }) E/ }& o12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
    % x0 E0 P6 D9 H: A可以刷课 可以刷网课 自动 还能自动批量注册账号  O2 o1 v7 N3 a0 d) W/ Q2 K. ^
    模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
    . s0 L+ |/ U3 `3 R) K4 T1 k. v! h普通B站视频可以爬 番剧是需要会员的6 M. S$ m6 v$ l4 Z1 d# ~

      i# Y* a2 I7 P& o- D9 N" N
    7 V9 M' S! d) }9 b' F
    爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)9 ?# g4 S+ C: a+ w, {

    4 P. c/ b) s: ?: }( ~9 b

    # p+ y7 D% k2 p0 m9 Y: W7 G1. 确定目标需求 (弹幕数据 那个视频弹幕)
    : ]) O9 x2 i( Z: s/ L1 Z6 S    确定了
    ( g  A+ x7 m0 L. i1 e8 e4 H2. 找数据 (数据的来源分析)
    0 \; b  h' U# T' f  {0 G9 I    简简单单 找到了
    , F! }- K) B1 X* m- @: s3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头); Q5 s1 s% X3 Z/ o. ?* E: c
        请求方式: get / post
    / E3 R- D  {' P% h0 _    请求头:
    1 }  e7 h8 Y9 _& F" @5 k! |) U  S; x    https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
    + [8 C) {$ C4 z2 `2 c- K( e8 m    (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)6 u9 F: u* u5 j$ x
    4. 获取数据 . E1 [) X) S$ n2 V4 M
        文本数据 response.text 获取网页源代码
    ; r% J) b' R% F" p6 r% H3 l) \    json字典数据 response.json() 通常一般情况是 动态网页  ajax异步加载 用的比较多' X4 X9 Q) t: |' X
        二进制数据   response.content  保存图片 音频 视频 或者 特定格式文件
    # U: V  E) k! [% K6 F2 ~* b5. 解析数据  v. J) C/ E0 B) d
        正则表达式 .*? 解决一切  遇事不决 .*? 通配符 可以匹配任意字符 - N8 c0 c$ c% ?$ Q( R; f
    6. 保存数据$ z4 A: n5 b) p
    1
    $ [0 e9 ]9 C. U7 C+ J' @) d$ j& z2& M+ d7 Z! C2 {* m# x
    3
    0 s  D, O. ^4 b- V44 I- P1 p; Z& J( ?/ J" e4 x" T
    5
    ; Y1 V/ j3 X; P2 D& J/ u60 O% J& `7 n/ s: k- N
    7: ?; ~0 z. ~5 w9 ~) s8 D( h
    8
    , v' O9 ~' l3 `# i& h2 i9
    ! X. i6 [) Q% Y3 F( s10
    " [1 O2 }/ P( f  p- T11
    , k. H* N/ l- @1 t/ }12
    % }  d- `* N& w8 K13  S! X' b$ r9 G
    14  N" P: x! V4 z$ b$ d
    150 h3 \) S& j; m" S; {0 P: ?
    164 P% h; T) K( J/ \( @
    python除了做爬虫数据采集,还可以做什么?/ W9 J6 D4 T5 \& x( Y+ |
    兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
    : x  i+ v8 ]: Q. `# n. K. t
    7 N- e  U" I/ x4 o. N8 M
    / Q$ J' P' n( g. C" }4 W4 N
    网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
    8 r8 v# b' V- v. u9 |比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
    4 x; c/ n0 h4 y( l我可以做到这样么?
    5 b" d: \, D  A# Z9 ?& t0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
    4 F: ~  v- x% J/ z如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
    4 ?  f# h& v; J4 E
    6 S2 P9 X' [2 H7 G2 ^" G) V

    " `$ s& t3 l/ {- M5 e爬虫开发(脚本)(就业/外包) 可见即可爬& w6 M+ e0 J  C. g5 N8 V8 l3 _
    虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!; p2 P1 C9 m$ o' k1 ^
    很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
    " C3 M5 G- i& [! v% J1 O0 l之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!9 X% h6 A; i  \

    7 d6 S- M0 I+ U$ [
    " ]* X2 T9 w! l, \$ ~
    数据分析(就业/外包)
    7 M4 E1 `% Q- ~1 u  ]8 J7 W7 A; |- _/ e. W+ a/ h6 ^
    7 W% X; X% p- R% q& a
    自动化(脚本): Z9 V2 [9 p! x4 d4 H- Y+ V8 m. e

    7 T3 T8 v* d( e( u& P  X

    - m& o0 X3 G. o: l  l+ y游戏开发/辅助(脚本)
    % z+ Y7 W+ t, [  u+ G* g- c& f% q8 g" w8 L1 ]

    ! _# e1 D' ]/ g) @9 s  h人工智能(研究生以上学历 要求很高)( v4 a+ c5 W# s1 g& v

    - {# O: N- f( D# J! I- K# g
    ( [+ l3 c4 k7 p) u
    等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
    $ _% L+ f, S! M: R0 ~( j/ O. ?, d) D* N/ Y

    . ], J% J7 m7 |" y我们开始正题吧
      M7 W2 X+ }- _; w0 i
    1 o( `. \6 k, I6 E/ U) W
    + X  b. s2 {! Q9 G) [5 v* C, q6 @
    爬虫部分:" H. g) z7 w( I: s* L
    发送请求 第三方模块 需要pip install requests9 u0 z+ s, E! e! s. c

    3 x* ^  J- I4 Y( g  _' U

    6 W6 y$ w5 [9 W  ?import requests
    / {& a3 p" D8 U+ rimport re  # 内置模块
    ) ?7 X2 ?0 N& ^
    3 o7 K3 K. P' Z
    . l& C5 a  w$ ?' M( Q( D% [
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& [5 H- t6 ^. H* X
    1+ B; n0 ?/ q6 ^$ m
    2
    , r; z% s! m" m% F& _31 d+ z* p$ D9 W8 R% Y7 z( c! D
    41 a, `' W/ i# A8 |/ V
    请求头的作用就是伪装  h( e9 |; i% y5 y1 p  T

    6 g2 Q) g: R! S7 Y
    2 [9 _, h9 [+ ?. K
    headers = {
    , g* n2 @) V% s/ b5 V    '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'
    ; {2 v$ \6 l/ f: i* c5 |1 G& O}. S# ~; V8 K; a$ i9 F2 x4 r, p
    1& h/ J, v0 G8 y  q
    2
    5 }% g: }4 h6 Q( }3* G" L( j1 j# {7 _% |& q  u
    模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
    & |, X, ?. o5 Q- F函数传参
    . _/ z, x) }/ D/ ~6 [7 i3 d1 r/ o0 O1 C

    8 T+ F' s4 `; K  R5 `2 e3 X3 Vresponse = requests.get(url=url, headers=headers); i! e- G, @# i8 Y
    1" @6 M0 _! k( e0 N1 @0 J$ _
    <> 对象 对象意味着你可以调用里面的方法或者属性* i  `* e5 `% H
    200 状态码 请求成功- Y$ a& x5 l3 ?& ?+ M/ C
    获取数据 文本数据
    9 N4 r0 A4 e8 Z5 h, @1 `) P( J自动识别编码
    " o9 z* w$ Z) G
    / j- p1 _; @: M1 q* `
    , L$ r6 F9 t, j6 O& l8 F7 A6 y1 \
    response.encoding = response.apparent_encoding
    $ D% z! \- P8 n: x$ f' Lhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
    / Y+ r, b+ }% m5 [: \" V6 l1
    ' n1 x  T0 e# s/ _2
    0 ?# i% }/ F* {% c1 D2 Hcontent_str = ‘\n’.join(html_data)& d8 W3 E4 S% m5 Q, C) |. }( W" s' z

    ; }/ P  L- |8 Q2 l; j, r9 J: D
    5 q8 q6 x/ e$ j8 w
    要列表转成字符串 ‘’.join()* |1 j" S: Z" o$ p
    for 遍历7 y" D) j( a' P7 B4 s$ O, ?
    保存数据 保存字符串" M& ~5 t" p: E( z
    for content in html_data:
    7 g; |+ V$ O# H/ I' J: c: m    # mode 保存方式 w 写入会覆盖 a 追加写入
    1 f: V4 O. @+ d    with open('弹幕1.txt', mode='a', encoding='utf-8') as f:5 J3 x! H2 Y5 h' W" _" O
            f.write(content)
    # ^- z$ x" |0 i  ?  s        f.write('\n')- Z0 Z1 A2 f( o) c* {% o
    , Z8 m: l" Y& Z* F# r6 e
    ) n( {3 S( p5 S( B1 ^4 g
    # print(content_str)
    " S4 \1 l( l* H4 R" L1' x3 `' f$ Z  s$ f1 R+ ~6 z2 ]6 H
    2
    % ]( s0 a% G/ n0 _9 S37 a( T5 b3 f. X9 `% T$ Y1 Y. z3 X# Z
    4! ^- c2 Q) P% E( q
    5& m  c2 n  U8 g& @
    6
    1 U% ?* ?0 Y* A5 }/ U! d5 S7
    # W8 k2 X5 U) V3 ~爬取结果6 O; f) J# F. {

    ( ^3 P) u& E% H/ {2 N
    % q3 v7 L, ~0 f" J. ~  k
    # h) C0 D2 D9 h- r0 Z4 f3 z4 G; t# H2 W; x
    ! ~, z+ z4 d$ u$ N) B8 S& a
    然后我们再来实现制作词云图部分0 k& i6 F9 ^9 P* {, }4 K
    # @  i7 }- f5 T$ y

    ) e8 g, E# x/ p- x首先要安装这两个模块
    / n3 Y0 h% `5 A4 K7 P; ]) F- }0 n: z+ X! x
    5 U! ?, ?5 Z( B2 ?+ K
    import jieba& @: n& L/ ]# M) m0 @/ k
    import wordcloud" Z5 }7 S0 r& w
    1: B0 y, {$ u9 b0 h4 T
    2' G7 k0 A; Q- y' u' S
    一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
    # e! m' N" a6 i; n& s, {
    : @" _) X3 `# Y( f, c# j7 a5 q4 ]. R
    7 t) _3 Z' a1 B
    f = open('弹幕.txt', mode='r', encoding='utf-8')9 b+ w# B6 T( {0 ?4 F0 q* _8 l
    text = f.read(). q! F, j3 V& J% v2 T. Q3 k8 @
    txt_list = jieba.lcut(text)
    1 u  `4 j% _0 i5 A; j) ?# print(txt_list)8 h. w5 E1 x* H. A, m
    1' q  q. f$ G* |; P% L- }6 p: q3 p$ A
    2% K+ A) T% U$ v4 g9 R& N3 P
    35 E' C" s$ S/ T% ^! f
    4, T3 W9 Y1 t. o8 M/ Q3 S
    列表整合成一个字符串* r" J5 D% O& T: x2 S

    ( J2 R7 V9 ?0 w2 }
    + f% M2 ^0 M' K0 b3 }
    string = ' '.join(txt_list)( |+ Y  {- [" Y
    print(string)1 T1 O+ N, I* D( p3 J
    print('---'*50)4 u  a  b) ]! A& G4 s3 d) Q
    print(str(txt_list))+ K' ~% R" J, @7 A
    1
    % o4 w3 S0 l! G3 Q: j2
    # t6 q; b( b% R3' w% W1 r) k3 y  S) y
    4
    & [! h& T4 x- |  j2 N; a词云图设置9 Y9 n0 J& n4 r/ S! `
      d% b5 {) X' L3 y

    4 E: f4 B" V' a5 I! \" M& vwc = wordcloud.WordCloud(1 m; l. x5 {% m. P7 l
            width=1000,         # 图片的宽- ?6 Y0 a: H0 v# Y% J9 X  t  F
            height=700,         # 图片的高% i- F1 T/ ?7 I* Q  [( E2 {
            background_color='white',   # 图片背景颜色
    * r  @- S2 W! O4 {* S9 |7 g1 @        font_path='msyh.ttc',    # 词云字体! X4 O0 r( W+ B: F+ T
            # mask=py,     # 所使用的词云图片  S- a. S8 g$ {% W# |. z: f
            scale=15,, F# \; r% c7 N% R: J
            # stopwords={words},         # 停用词
    6 z9 h% L8 M) [4 Z* ~# ]) {- Y# i0 ]        # contour_width=5,/ H( D# o4 ]6 {+ w) Z1 `; x9 h: s
            # contour_color='red'  # 轮廓颜色% p7 b$ o7 L" `% l% \
    )
    - |, u* |! q, J3 H- T' S* x/ S1
    : y" L0 G5 C; D7 W2; @( U1 C4 X5 C! }- d4 y( C+ \  o* b
    39 B4 {. T8 n$ @  c9 j2 G
    4: s6 }1 p1 J) u6 V& n
    54 t) j$ L0 x! @0 L, Y4 P
    6
    " f2 s+ ^) s- D' S1 B7
    , L0 H3 t. w8 l3 N) ?83 V+ e; H' r2 {" v
    9
    6 u4 C& J5 R1 x10, m* l1 m9 z7 @/ y* B$ w
    11! l1 M. D- T) @9 |+ d
    给词云输入文字" j( F2 ^7 [& E8 g! Y! ]' Z1 `
    , k( ~0 L6 a. |+ A; F7 ]
    " J, K+ I$ U" a; W9 `. |8 C
    wc.generate(string)
    7 }/ k/ }! G1 O! _7 t6 |* y1
    ! O& C3 j. E  ], M% D# k3 [词云图保存图片地址- e, }+ ]/ T' ^& d
    # ^/ q& h# T$ D* j9 O! k* C
    4 F* P& g) l" _& {% X0 K
    wc.to_file('output1.png'); ?: i9 k. Y6 T' m( \
    19 R4 G0 J* E8 z+ {. o1 b! _
    词云图的过程中有点慢,大家不要心急2 k! P& Z9 |1 H% j( L

    7 f0 p, z  @) ^! y0 L- G
    : T2 r1 }3 w  G1 q5 P( ~6 I
    这是最后的结果
    1 }( l3 H$ n( L( P8 l$ \" b. g- ?8 D
    9 N2 c* x5 F- X, ?3 I5 w4 Z
    没有加停用词,所以一些无用的词比较多
    ' w5 n' H% p, m& u  @4 Z$ A+ i. X2 o8 K; n* B
    ' T7 W! A6 n: m- `& u
    stopwords={'了', '啊'}
    4 h/ v/ e7 M( r- j1
    7 t: ]0 U% P6 R$ b& ^把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。' O9 r, l3 w" s/ W! I; b- p) ], P
    我们再来看下9 A0 Y: a# E0 y8 S3 l

      X% G/ Y8 j9 m9 e( W# X0 n

    4 H( R: S% t( E$ ^4 A/ C7 O不知名网友:666666 牛批 老哥我要学!!!
    1 x% y; K5 w# ?; O. h, W1 l" `
    4 F) H* r$ _' n3 C9 s" D+ l
    ) k' s; d. n( A$ b& y* D# U; X

      w2 v% `1 ?- I# X) A, z& e/ _
    + o: n' P) c6 P( ^5 ]1 d
    ————————————————9 i. d+ A# m/ T: _' i! P
    版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。4 U# \' }' s" y' S( v8 k, Z
    原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
    : U: {# Y5 h/ |0 Z& c5 J7 y3 L& B- g; M- A# K' C
    ! f6 b8 ]* k' S0 a1 t5 Q
    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-8-1 06:19 , Processed in 0.387044 second(s), 52 queries .

    回顶部