- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563315 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174217
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
8 [# V7 q5 B# r0 s! m
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
& r" H- j, `- x6 b2 z5 [* T, O, }今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!. H4 L9 S. M2 `5 s( o$ Q
康康大家都怎么说!
: j9 [$ A( ?# X6 A( F3 B, P! J* |$ s/ E W, X9 ^
' \6 x& a' D5 k- S
8 B+ b. \" @2 B
$ S1 i- H4 v* T2 ^
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
5 B6 o0 U, |8 n# r' m7 _ G
2 f8 H E5 a( G# B% i5 B8 Q! \" S! O1 ~
如何安装模块:
) C% O9 [9 n( D( c7 A/ M9 q7 u: P/ L* |% m. z3 I
2 F0 L4 x8 F! r4 F& h
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车% v( m9 d' g) D: b4 o' c" Q) K: O
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
6 ~; r8 T5 \ R1 w7 r# A如果模块安装失败了,可能是这些问题:
* B+ p5 {: P' ?1 P. ^$ Q$ @5 K) }
( t' Q+ a( q# q. v# w
$ e1 I! p# o: @! d提示:pip 不是内部命令; l4 e/ s8 s3 z: A2 [% k. B
你python环境变量可能没有设置好( y) p8 V/ ^" p+ ]# I
有安装进度条显示,但是安装到一半出现报错了
! G8 f; U1 m8 {% v& ?因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB) f, Y- ~* \3 G: ?& O4 {; s* k
read time out 网络连接超时 你可以切换为国内的镜像源
$ x. K2 W" W& j+ r明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
( z0 D% }6 }0 Z" Z& b你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下8 d+ O+ `1 h; a/ W$ X2 h
可能安装了多个python版本
& h8 g0 Y6 @3 l; b( p8 [7 g安装一个版本即可; l. x: b: p6 @& S7 e S8 j# z" o$ d
Python做爬虫到底可以做些什么呢?8 T' _2 H* Q! i3 u% Z9 _. E
6 \9 L' K. Q1 W( `) [0 J) G' K
2 I/ L2 g) c( h6 `/ F/ ]常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…( V6 J: T, j& t' @* \% w
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量" |6 B6 L" r/ V# H$ R, z
可以刷课 可以刷网课 自动 还能自动批量注册账号
2 H, A K& }- t' p/ {+ }. ?% L模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
# g( Y1 a* Z. F普通B站视频可以爬 番剧是需要会员的7 r y. S4 [' @, E% v$ \0 r# k0 I
( ?7 X7 D; {, E- e- L$ E3 |6 j5 S
% d/ i. c( W2 }& B0 G爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
; U$ ?5 V U" H
/ R% p6 N! i O, ?6 |- }, \, o$ Z! _! T- u l* p: o
1. 确定目标需求 (弹幕数据 那个视频弹幕)9 B$ t8 O3 x& j* e9 |
确定了
0 D5 e; d! ?! F2 U$ h' T2. 找数据 (数据的来源分析): B# X6 E4 M0 s5 s) ~4 r; a( s
简简单单 找到了
5 V. [" l4 h8 A* P7 p+ W; W* o3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)% b* F4 e6 u# m1 g
请求方式: get / post: c( o$ ]1 b) W. U: w0 |
请求头: 9 Y! N) ?9 C: G! R6 _- S" Z
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
d# [# S h2 T (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站): p3 R& R! h% _0 N! Y
4. 获取数据 ' D# z- ^1 h' _$ c4 z- V
文本数据 response.text 获取网页源代码3 ?' Q% d+ E% n- |# ?6 i
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
@: `" }/ x( W6 Z& |' g2 G 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
/ |% L2 I- G4 N' w1 G5. 解析数据
, V) \$ m0 Q) ]: J0 P4 G 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 4 q3 T2 H0 `) q: A
6. 保存数据' J- w* D* w& n% d1 w/ _% w2 y
12 V- ~8 }: Y" A/ f$ _
2
; c- c4 V. u" L4 R3& _. H, X o8 C$ r1 |& ~( z' \
4! o% |$ r# E- D+ d/ G
5" _+ G8 _$ Y- z
6
. y+ q( X- F0 g+ W77 B! r4 T) I/ Z9 q+ K! F% I
8
. }( G/ n% X R$ P& V/ w9
2 A2 x( T" Q' c P( g3 D100 Y) p. a; r/ U* c: }) h
11
0 v* u, F( J# p) r9 \; i4 s4 l; h12! T! l0 Y- |+ J" Q( f
130 v. y8 g; p: S, C/ Z3 K; z& E4 |
14
9 i5 A; j' U3 D. }& r& \+ _0 [- n" O15
/ u. l5 C% N) {& `16
. p& C+ L) ^" opython除了做爬虫数据采集,还可以做什么?5 [# O9 p" b4 h; ] ]! I- c
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包), x0 M; d- t" t4 j4 W: d3 A
( A& Y( d" Z! ^0 Q9 N" t! m
% L+ e: s; A: R网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
4 C9 P: [4 |, p% N比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
% W; i5 L0 D+ t0 |我可以做到这样么?, k( ]6 U- b7 m
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
# V z3 {* A3 n如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;6 b' O( H: _9 D. i5 [7 W
( J: e8 E( n- ^
/ c8 ^- w% h2 p" [. o爬虫开发(脚本)(就业/外包) 可见即可爬# P0 F+ s, O" m: _) k
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
) a4 m, P! `3 z% g9 `6 o* I很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
7 ?9 _& p* l, F/ W% f+ a* T之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
: e" F1 K& ~8 Y. @' V: `) h# u ]0 f- T
& `; j+ W7 |3 ^2 |1 K4 a; q% t
数据分析(就业/外包)
' |# P2 ^. v6 n4 B2 b) V1 h8 Y! u6 t$ P, n
3 |( \- p6 ^- e) f& Q5 \
自动化(脚本)5 u. }& [* p, R1 H
}% I+ D% B' R5 F
4 f6 B: c" {9 e' \游戏开发/辅助(脚本), O7 r9 H( V8 h5 k4 Q' V
* `3 N. U3 G- Z, @/ C9 S
; U9 Q, c6 ~5 r, H2 I" c人工智能(研究生以上学历 要求很高)4 B" R2 d$ G+ R7 h5 q1 D
+ \7 B+ I& d' f# ]
2 s, ]. ]& n3 A( F等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
% K; [- L8 z/ |2 u1 m
; W; z# Z- S+ R4 {& G9 l/ H9 a' J& k9 V
我们开始正题吧
+ _$ u' ?* d% i6 h( D2 @3 x* G2 ?! h6 j) T7 m- ]3 Z
. ~5 L, P0 v4 M( f* K2 M: `* J. h4 a爬虫部分:
1 U/ ]" S. ]* |. K0 l- _发送请求 第三方模块 需要pip install requests7 Z0 ?. j) P2 X: V# u# b
1 z# F( L7 z# R8 W2 T# ?8 r8 i: l( g# C, r0 e
import requests
& l7 u0 `6 P% j+ p: Limport re # 内置模块5 b/ d: @& [2 z+ O
* B8 c3 a# @; a, A4 t8 e9 b' {8 n. `5 `. _
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
2 r5 T4 K; `' |/ q. Y) ~: Y1
- ^ I7 Q! ]8 N: p- l/ ?% Z+ U, F2
. T _$ y1 ], v/ B9 v8 Q ^; n+ Z3
) M9 ~* f4 s3 A4
9 G9 s, m4 ~0 A) D" u请求头的作用就是伪装; d4 _! o1 L3 _5 W, F, k! `
: X5 }& O: W( J
1 w& w" \4 [( yheaders = {* @7 ?2 L; ]- x+ Y/ y# }4 w9 n o: d
'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', [) M( d+ \( I2 }# B3 V# d4 z* V
}
4 }( r& B2 o" q6 d7 X4 @# V14 A4 S% ` t3 `0 _
23 G% r7 K5 v5 N# v
35 Q* U- ? B* T& [" k p
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据; I. Y6 x' P/ @/ L. J' V
函数传参 z8 U( n3 _+ p3 X0 e; f
* K4 Y C0 z( T# B# r+ [( V8 z, Z- V2 R
& W1 u- n" n2 ^, R7 [; w) Z1 Cresponse = requests.get(url=url, headers=headers)
% ]- K- U0 r' {1
7 ?0 j* W6 P* d' T<> 对象 对象意味着你可以调用里面的方法或者属性
( P, {0 s( W& U0 k200 状态码 请求成功7 \$ t E$ N+ Q; Y( W$ Z
获取数据 文本数据 p; R" f' u, y( \6 h
自动识别编码
. D7 o& O9 c9 G* n$ N! e. P" ?2 r- S% Z# i" R
5 j& w# A- \9 c* z, s
response.encoding = response.apparent_encoding, e0 I5 K# ?& s; P. f
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text) @# B0 v$ I( f" S* t# X
1
. W( S% K2 z0 c; Q9 M6 T9 ~2
7 ]& }0 y8 N l& V# G' Ucontent_str = ‘\n’.join(html_data)
, |% a8 l; F$ O& _6 ?" w
7 j s2 h. |) o. q5 ]1 G' }0 T0 C6 T4 b. P/ y$ @4 I& R! X
要列表转成字符串 ‘’.join()
/ R8 z2 E' G+ s% _for 遍历
?: _0 M( H; C+ B4 J保存数据 保存字符串4 V7 M8 W% M) l. n' p' D$ M
for content in html_data:7 f6 z$ n1 Q) C3 s4 g3 L/ X
# mode 保存方式 w 写入会覆盖 a 追加写入
% G! N% Q% x$ _" u$ O with open('弹幕1.txt', mode='a', encoding='utf-8') as f:, k+ p4 q$ U2 c6 e" T0 B
f.write(content)3 t0 |% z' L1 `( u8 N' |, |4 E
f.write('\n')
7 A, i+ I5 p5 r0 q
9 t5 ~3 m6 J' @8 k( [4 q1 |
& H/ k J: ]# A( s# print(content_str), ~3 _5 a. l+ i8 S+ e) l
1
) V8 K- c7 Q0 J) q2
; A B ^. e: y, s# V2 P: \/ F3$ I+ c. _+ G- o0 T2 U
4
) s0 @9 x' ]) A. J y5- O5 x% u; \# [ j! k0 |
6# r$ x$ D+ O9 W# `9 ?1 k( Y
7
5 u- J& G+ Q2 J t爬取结果3 f- Y6 T( Y8 e6 R- T* ^
' h9 T) ]0 M$ o
% m& _' {" j+ v( W0 G7 l4 H( r
: C) v) u* L8 v! @$ _
1 H7 o( l* c2 H. |+ w2 K- \1 \然后我们再来实现制作词云图部分
0 C, @$ p- W9 K: Q7 ?- R. g4 g4 \/ L( x W. n, j& ~8 {
" s) V/ R F: T' d% U! {首先要安装这两个模块
5 q8 Z/ g( ]7 e# p& j) H) a8 _$ b, w3 o
( U, m6 V/ l5 h5 w4 D9 limport jieba( {8 b* w/ ~- Q! u5 T8 j+ d
import wordcloud& ^; R* e! | K% i
1/ T! {/ a1 S1 A: N1 b" n
2
6 s8 g6 N" P" r; }一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
$ j* H4 A ^+ D: d" n( _# u: `; u# b% q p* H
- Q0 |9 Q8 u/ H9 e9 Lf = open('弹幕.txt', mode='r', encoding='utf-8')
; y" F" v6 O3 ~& Q; d: T, mtext = f.read()
; P% f) L P6 r7 v4 `txt_list = jieba.lcut(text)
, E4 @. x* I" i5 g# print(txt_list)
. T$ P y( \2 M11 v( Q" s; e& l8 V. ~. }
2
7 m1 A0 g, q8 D- p3 W35 b+ x( W m0 t$ R+ m1 C
45 v, e) X2 o# V( j, o
列表整合成一个字符串1 ~8 Z/ x( l( V: ]6 h
9 Z# @! g2 `5 f8 z2 l5 x
* j) A( q4 P5 }string = ' '.join(txt_list) Z. }- A `3 q: g$ Q+ t% C
print(string)* l6 O/ y2 s, K7 j0 k
print('---'*50)
' m) \3 E, J7 w- qprint(str(txt_list))
- H2 E/ V# ] e& a1( |& @7 H' z/ r
2 W6 d' K( n' p% r
3! ?1 w) f, R6 V# Z" ^' D! i
4
7 ?0 M1 R4 B) g词云图设置
; [' r5 t$ p' y4 }2 x e, N, K; ^) M* p4 j0 H$ I1 l# t
+ Y/ {$ Z5 `7 P l2 S9 t
wc = wordcloud.WordCloud(
4 l* E6 v/ \& P# d width=1000, # 图片的宽5 g8 p% E5 a2 N( k
height=700, # 图片的高
( h# b; ?( L' }, e8 K* Z7 Q9 M background_color='white', # 图片背景颜色
3 e4 x5 t. M8 D) a) I* \ font_path='msyh.ttc', # 词云字体
+ b) e, ^' u8 Z8 @ Y* k # mask=py, # 所使用的词云图片/ ~: _+ K1 ^. i+ X/ U9 K9 e: O
scale=15,: Z. S2 z% ^: `1 G
# stopwords={words}, # 停用词
0 h9 L3 x7 x! p9 v/ P ]3 n # contour_width=5,
5 o6 N% e# |) F5 D* I( B' U # contour_color='red' # 轮廓颜色 S* @: x6 h4 q& Y9 X4 {0 y4 u
)+ H7 Z# x1 E4 v: Z& B/ s( L
17 A6 G% S# U* W) p' Z' b
2: M$ g# z- _& c& p# C' a" [2 y
3+ D0 g9 R8 H2 E$ Q0 V9 g6 E
4& _8 W' [3 }+ }6 Y
51 M) x9 ]8 [4 t9 R7 s R
6" x9 K( P$ u% Q0 s; w" P
7* _& [( V: m& r
8
9 z* X0 Q- F: Y4 K& F, `: m9/ @- \5 d$ v7 _/ ^' N6 [4 g
10
# H. D; c1 Z& D( a$ y1 g11) J V3 a3 }5 i; V7 }- @
给词云输入文字, y8 t7 ^+ }. z
1 f, t- g7 P- W9 o) V! Z3 ~* W) F F$ A3 \# n
wc.generate(string)+ k: e1 a' {1 f8 m8 Q
1
& b$ n' j) p5 N9 I# i6 K# p- O: b词云图保存图片地址
% ^1 R5 m: H# _# C9 F, z/ w0 A: |4 W, t8 U7 w; n
J0 _5 B1 V; zwc.to_file('output1.png')# h/ {0 I3 h: y" z f+ W; f1 W
1* m6 A2 ^( p6 D1 P8 @. O1 k
词云图的过程中有点慢,大家不要心急
7 n5 [% B5 U# e# Z4 d- z8 Z. d1 T5 [( o0 \9 r4 S8 B3 ~" e
( q; ? Y& G4 _' E- K- }这是最后的结果% h& [/ G/ u$ ~0 ~% M3 Q
. [% e1 V* R6 D4 M" R4 b1 z# o
) B, q0 \3 `5 o* b没有加停用词,所以一些无用的词比较多5 M1 A9 W% p& A, f2 e
2 A" t7 d. d$ g0 Z/ B0 R! a- G
9 h/ Y, p% h- @3 ~( j, ustopwords={'了', '啊'}+ o% H+ Y8 l1 _. Z- g8 Z$ F
1
8 x" ^/ P" l1 t0 E/ t2 q& l把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
( g. B. O" M* Y8 K我们再来看下
" I& S4 ?* u( O, c: B% _0 b6 h* R! C. a5 ~ c2 ], Z8 A! E$ m3 J
. V/ n/ n7 R9 T4 d2 t C
不知名网友:666666 牛批 老哥我要学!!! J1 Z: s% ]! @0 e
# C$ N4 U- Z" D9 D/ i! r8 n W3 p- n5 _+ l+ N! z" n. E
* s" _; p7 }, v$ {
6 _$ f2 l% B+ S, V' y————————————————
8 N$ H" E! U! b* m2 g3 `5 o版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) J; B* ~, u6 l5 }" p/ N5 m
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907) B! i. L0 @ T3 M
% a$ P$ M( u6 ^, Q) r0 B
4 q& ?, b, h1 ]$ H, d4 d |
zan
|