- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565633 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174913
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ C8 B! n' t; `' U S# O
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
' Y; c6 `4 E/ ?7 N( ~* _今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
1 G2 q; C8 x" x# d9 P康康大家都怎么说!5 K0 e) ~' W) K' c5 K
/ r) p; y! D2 q) {' ^9 p x
0 c c$ u& W+ t' K. I7 G9 e* O3 k) q
8 K+ T0 ]( y& _! ]& R
# k+ s4 L7 e* p" }5 O' _开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。+ z: V: T% a9 E# A" F
" w3 ?' G: W; h8 |% { P! i) v) m9 I+ t2 o
如何安装模块:
) s5 w+ M* N$ ?; }4 o4 N
# }$ t' S" ]! N$ M
- e' I/ a2 Q# i4 a* `win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
3 o1 P8 D& x8 \, e; Ppycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
% W3 i/ E1 f8 D8 Y3 q如果模块安装失败了,可能是这些问题:7 E1 q+ m2 \+ f8 F0 G" Q
5 m; n4 t7 d5 `% R% q
8 L0 X2 Q8 k* ~% t' I! g: r提示:pip 不是内部命令
9 B' @9 D5 e6 b+ c4 `! ^ |, R你python环境变量可能没有设置好6 ^/ w8 E- t! z) p! S- d
有安装进度条显示,但是安装到一半出现报错了! x2 v# U# [$ }
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
' r" T+ [" d* N9 d, g- R" B) l* fread time out 网络连接超时 你可以切换为国内的镜像源
7 W- F/ s9 v% E5 {8 p' Q明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块8 c8 F3 h Q- w/ t% J( @
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
# h3 n+ o+ [$ r U可能安装了多个python版本; V- M- y" d% h2 Z% b8 Q, m+ U
安装一个版本即可; |/ b% _$ w) O0 z, I: {
Python做爬虫到底可以做些什么呢?5 S$ S) h# U& z% c
, z# L5 \5 Z. C; I
9 A9 k. i- E- n常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…/ ~$ f4 c* X1 H
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量( m @/ A, T. ]! \
可以刷课 可以刷网课 自动 还能自动批量注册账号
@; |9 l7 }' e$ E. R模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
% v' h- c/ r3 }: c# B& c普通B站视频可以爬 番剧是需要会员的
) S" ^6 K0 ^4 _+ d3 f6 \7 R
: t3 C: o) y* A) H7 K2 i x4 f5 T" p: G" m) m' s/ U( E% F- M/ m! I( r: A
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
$ o2 K1 p1 Z. n! S8 z5 U" W7 [4 F( i' }0 v
5 M! n3 t, w2 @
1. 确定目标需求 (弹幕数据 那个视频弹幕)
# b6 d( @. a" y+ v( W 确定了( A( X/ u- K) c- W! h
2. 找数据 (数据的来源分析)6 n# x/ I, {- o; B( F" M
简简单单 找到了3 I8 ?+ `% q* b. T4 H' q. s, K
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
$ [8 @$ q& B9 G5 }$ | 请求方式: get / post
- n& g g0 J+ j1 \% I8 I% x5 o 请求头:
* X6 Y& I) y; W8 ?' H m4 I https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
7 a; D" y& L" f* M+ v( G (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)4 Z2 e& H0 `7 p& P G5 T
4. 获取数据 $ y3 Q% ]% H: x: d
文本数据 response.text 获取网页源代码
7 g/ n' f+ M8 C/ p json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
2 _0 b* O( a- I' v) v: G 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 " N: ~" ]# w8 `! I2 p, e
5. 解析数据" r& W u/ |. `3 @ \
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 + P9 v" c' i2 W; k- u8 d
6. 保存数据9 v0 ?+ Q6 L3 Z, e' S
1- r/ p( ^" J1 Z; \6 X2 R0 P
24 M. Y& M& L! B: F. l# c
3
8 [! S4 _! Y0 r9 n! K4
) L! L; w8 c& J& |6 F5
3 @8 T2 |4 i: ~8 E' j- F0 x6 Y6& o9 N7 r5 @- |0 ]2 ^( L
77 i: T$ f# C5 L. P2 P5 c) S" M
84 e- a+ c( Q7 i: ]3 e4 I
94 |& H" ^& k1 B$ _3 w, a) Z
109 M. Y- T" X6 T$ ^
116 i0 |2 y5 T: B" K, h
12* f6 `: K% ?2 [0 {7 p
13/ M: s. y5 n0 c) G1 S
14+ Z' V6 A/ K7 x; }$ S
157 F( T& s; ]% O* P+ h
16
7 d; G4 C, G0 _& R( q Epython除了做爬虫数据采集,还可以做什么?
' v9 K/ o/ ~- g兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包) N' F0 L, @0 v0 |3 E( z! q
* s0 m! W( }/ u# U: M1 c l1 M
+ e+ B f; `- w# a, n3 W网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
1 m& ^, v/ N5 w& ?, G5 Z6 e比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;, m o# g; @0 G# b( l( K: S; r
我可以做到这样么?& T$ p+ O8 V7 f
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
3 i6 d, A) A5 k7 c; [. l如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
& _; y$ ?: f w. ?' H' N
7 v, g5 Q9 j2 _1 W5 E& { f8 [6 n/ {% V% Z8 a/ j
爬虫开发(脚本)(就业/外包) 可见即可爬6 R. ^( W; \6 s
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!; f3 c; l0 v. h7 {# L5 G; k
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
& W" F+ ?9 s2 L2 n1 ~! B: `# l. O# q5 t之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!2 u" C c: H# \2 }. J
" o8 U6 T0 d* t t& `/ k3 K" h5 l
m/ G6 B* ~* i. W, M数据分析(就业/外包)( C' e& |; a: h ?. ~4 {
, U; L2 Y. h8 m6 W7 {, k& a
; E7 [, M6 |5 r. d" N# g自动化(脚本)$ R( P/ G0 Z# K5 J8 c' w( U, N
$ p+ y* u3 F+ U' B5 F. M8 f4 j
游戏开发/辅助(脚本)/ E" i' t7 o8 O& M$ h
& a) ]2 o* [! o; X& U: d0 @$ y
0 B# ?# w" R- P/ u N2 y% z) o人工智能(研究生以上学历 要求很高)
& J8 N: x9 U. A* u7 P4 U% e
+ h0 ^1 u0 l) V6 {* d/ w. V8 Y0 b" D
) c4 {5 ?) j# i& N3 H* {, E等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。! X; k0 I5 i* t! m! R$ e! I
6 K9 h- l' @$ `6 H2 n3 H+ Y
4 `9 J! z$ s3 T7 y) g. E" A. u我们开始正题吧$ D1 M) M6 b) U# \, l: P! A
" n7 Z& `" r( K
6 m% P; z/ a" d爬虫部分:
) e7 y- {) H0 \$ s+ w& j( q! g6 x" X0 o+ f发送请求 第三方模块 需要pip install requests
* X; i0 B0 L3 ]! k! A V% u4 j: L* E" O7 @& e! z
9 y8 G' U8 R, t3 \import requests
) {( _+ m* K' i9 J, P; D* `import re # 内置模块( X U1 G* Q6 N- u$ S5 Q/ A
4 L1 m/ Q* Y% @
9 f8 w6 A% T, `% x
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196') }; Q# Z/ O' _) m
1
- w! R2 l! A; k2
C6 f( }- {( _9 ~' U$ T7 L1 E3- {% P6 C" O+ e( m5 H
4
% z+ e# J' l$ b' K; ^4 U0 k请求头的作用就是伪装
1 }8 m7 }! ^; {. G! {! e0 D5 S: ]+ @+ |4 Z$ V: ~) I
3 [5 b- ?' A, S' p: u# b& \+ s
headers = {
: b* z3 i& N7 i' W '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'
# [- R1 v9 d, p}4 J% Z0 \$ O# K m; Z7 ~9 Z# B
1
1 K. P9 p# B' k5 }20 u3 u Z6 m8 I
3
6 @, A+ Z1 h) S4 X1 Z% `模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据! ^, p3 T9 Y& Y4 u
函数传参' q; I/ l( j! S+ p7 P4 k
$ e3 U( N- y! G4 z# S A0 {/ ]& F
$ y& N' |9 ^0 Y1 A- Cresponse = requests.get(url=url, headers=headers)
9 {- V* O9 C6 e1' q6 v% h4 E5 m+ m& H2 m
<> 对象 对象意味着你可以调用里面的方法或者属性
- q) b2 d6 R7 d1 T% d! Y6 ~# A200 状态码 请求成功
" o8 W8 P% u9 I/ q/ k5 q获取数据 文本数据
' s3 F4 D v# R自动识别编码6 I8 ]* H6 }- h/ Y! x* ~% X
9 J! r" R1 V0 }' S# Z9 M6 q& }) _: m" P% o* Y+ _
response.encoding = response.apparent_encoding
2 r- H8 h) G( q6 X2 vhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
' R* O' m8 e2 ]0 d; W1
9 x' d7 {' j k# g5 a( f; G2
: h+ `, K( q* U: ]. p2 J+ H; [content_str = ‘\n’.join(html_data)% s5 k3 H: o; @8 P
4 {# K) Z# D" ~$ o- I4 Z3 x$ E7 K& D- y9 U
要列表转成字符串 ‘’.join()/ C/ I4 A; x& D+ }
for 遍历
; K! ^* I: B& r1 I+ m( `保存数据 保存字符串) u5 Q; W1 `6 x- S9 O) L
for content in html_data:
5 g' w/ w6 x: I# D# J # mode 保存方式 w 写入会覆盖 a 追加写入. h- a3 l% ]+ U
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
' }5 q. a/ a* f: B& |. h f.write(content)/ o d {( j v2 ]
f.write('\n')
* O: J! v, G7 } f# e0 B
" N. E0 j! A8 C R7 ^; y3 @% u/ Y5 y1 ?# D; H8 j3 k$ r: [' M7 Q
# print(content_str)$ @, r+ R" M# f" x4 ^6 l
1 t* y) [% O6 r, e Q) V
26 W% E+ G! p2 w8 _# K
3
9 D* c- d' m" f, g4
9 g+ |$ l$ z: d3 B# C55 n. n' }" _ _9 H1 @
6
9 C/ _9 c5 I8 c7! O) Y6 y$ n, U! `7 A5 j; |
爬取结果) j+ [9 N' \( @# [; w1 P# Z
, [) b7 `/ t) f
# w* N3 U! l; M8 W0 Y/ C4 l9 a* p4 @ p6 b6 Z5 q( t4 {" p
. L' q4 h/ K) h& ]$ J, S
然后我们再来实现制作词云图部分
7 J* B6 ^! C- L. O1 f0 a5 I1 q3 M$ F4 B% P' P. E3 D% U
7 N! ?% b9 F% K1 ?/ ~5 u8 Y首先要安装这两个模块
0 ~6 [' S+ T7 \4 m$ {3 v
+ z0 ^) M2 C1 a2 G3 `3 s% |0 L1 q1 u0 |6 Z2 w+ Y0 x
import jieba
7 L9 O/ L! v- U: L! G7 G3 R5 mimport wordcloud
+ j" E N( y% F4 v2 ~1! [" j* e$ [( n) A7 W
2
) |1 B/ d$ O# v5 {一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。$ t( q& H7 n6 P7 v3 U
) L+ g# q% h3 p6 A% s) \/ E: J
$ _4 Q1 J# C0 h, w* Y; ?6 y3 N' j
f = open('弹幕.txt', mode='r', encoding='utf-8')
2 M% I# q- d+ b- Xtext = f.read()
. J$ n% i4 z5 @3 K# e9 N% ptxt_list = jieba.lcut(text)
3 g9 y! d3 X- h# print(txt_list)9 q2 O; w6 G3 t
16 c# O- L. G: A* J) ?$ w8 `& U
2
; a* l# }1 l1 I# L3
; U' J- D% ~( l5 k4
; r, l( L/ A$ T6 }2 W( y( F p列表整合成一个字符串
3 R3 y! {& G! M- t0 M7 h$ L# E* @0 ]) k; B2 t3 }% f( ~8 C2 [
5 Z/ e7 o6 _) L% ^1 ~ [string = ' '.join(txt_list); o' G, R2 L+ m2 d
print(string)" p# J; f* \2 A V8 H4 L# j! I
print('---'*50)% z- A( v" R, o j; A/ f
print(str(txt_list)); n! n2 K# z# M
1( E6 ^* g" y) \) ]7 U6 ^
2- Y9 `* G a% A# |$ ]3 X
3
( \3 J) d4 |& N. U: v4
+ L* W6 B- Q1 r5 T* o/ w( Y词云图设置
/ t& J0 D7 ~: w1 Q6 b0 }; U6 r0 Q7 I# z: L' L1 t: ?7 n4 S7 V6 P ^
; g7 U3 A' C, n8 t2 v) e/ I5 Q2 M8 x
wc = wordcloud.WordCloud(
- \& P4 i" Q: D* n$ g3 D width=1000, # 图片的宽
3 ?/ ]$ c$ w6 [1 \ height=700, # 图片的高
' V& I* {+ s1 H- e/ q4 |( B* e- r, P \ background_color='white', # 图片背景颜色 `6 \$ q, q( h. V( @5 W
font_path='msyh.ttc', # 词云字体
6 \& i- d( P6 ] # mask=py, # 所使用的词云图片
, h+ z9 z/ b9 s0 ^ scale=15,
9 A6 ^' x1 H; A4 k8 ?! a # stopwords={words}, # 停用词
, v9 w: f# A& x # contour_width=5,1 _8 _" R- i% Q
# contour_color='red' # 轮廓颜色 J A+ U. t8 k; h5 v% L+ y2 @$ v
)
_: ~. d9 h$ K# ?/ O# J17 f: t) t6 `; Y3 L; ~, o0 {2 p
2, l5 c: n9 L/ f% O% G e0 _
3
7 J7 Q0 n0 Z% @; o& j* X" Y& n4$ F' T2 X1 M2 E) ~0 K3 r( @
5( W2 X, l3 d; g- R9 i$ b5 P+ _( Q
6. P7 @; N/ J/ f# W
74 W* I! g$ N5 B
8
8 ]5 b% d7 }' ]2 D2 q92 }, u5 Y4 s z, f2 S. m/ ]
10
" q, T8 X9 A( c$ p11' M' t- H+ f8 H
给词云输入文字5 T3 d+ ]5 i! Y' e' y6 J
; ^2 O$ c# [0 k
! n' X3 @6 l9 x' j6 Q/ O5 S, jwc.generate(string) F3 e, d6 F: D
12 f* a. T0 v1 H/ U/ C# Q
词云图保存图片地址
# ?4 A! ]! L4 n* ^3 O/ J$ G; d. L- d
) q# \7 g" v+ k0 x+ C/ N+ P
wc.to_file('output1.png')0 e5 r" z0 Q0 F
1
1 M$ f# D2 i) |* Z) y( L词云图的过程中有点慢,大家不要心急
2 @, W. A; r I. D( k$ m# h
3 W; \8 M' K2 X+ G7 D, Z) w# g+ e( y, i# J" P
这是最后的结果
/ Q5 N. c/ O2 L( t c0 `: N& Y& @& q: q* K% ~7 E8 P
- Z% ?' W/ T* c/ J( c7 L没有加停用词,所以一些无用的词比较多
. g" s7 b% O- I& R5 v/ m7 n. O% z7 d c8 N! n6 G7 U
# f- B) x- _ I' a* z
stopwords={'了', '啊'}& G1 j9 d( L# M: G+ S
11 H" w9 }; Q5 D( L$ Q. _
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
. u( p9 i) n2 t1 m: n1 P0 L我们再来看下9 g4 m+ z |2 t3 i0 b
; p4 @2 N! _/ t |9 q: }& k, k. G& X' ?
不知名网友:666666 牛批 老哥我要学!!!0 d7 F& J, O2 }( D9 F7 [
7 o7 M' y* ?' Z) p( e
- d) |7 q& z, P) A1 Y" L4 h" |$ B' X: t' X& W$ s( i0 n/ z; q
! b& }# y+ \ z: [% m4 w Y————————————————
]9 P" s) \3 M R4 K0 B版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 [8 X5 l" @( ^
原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 k; B; n; b! n: ~2 r" X
3 y+ \) v" l5 j: F4 R* l0 P* n
- y) Q1 |( ?2 A3 T, r
|
zan
|