- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565673 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174925
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
8 }/ n, Z( Y" Q6 `& [# p1 i用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
% p! u- T2 y* [7 V" U4 k今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!9 i- P3 E, v7 m4 P
康康大家都怎么说! {( T& ?7 h. U) i! l
) g1 E! D8 k; ^
+ s, i* `7 W6 [0 D
5 U9 B0 R3 S) s' g# W
, H2 H5 G$ N+ ]+ l! _2 \' S开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。4 X& I; d) R, l& ^( Y
- L( z0 [- _- _. \4 K! P2 L; Z8 {4 h: {; _+ n1 T+ |: x# z
如何安装模块:$ P) R. V' t. W; y2 R8 E# j2 [# {- h
# u8 k5 J2 Z: J
2 P: ^2 O/ m* B0 w! o. ?
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
; ?2 z' Z; K, h# ^pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
' I0 m( U' a" O如果模块安装失败了,可能是这些问题:
& u5 q; N8 ~" F' Y7 }: \) J
4 v/ T4 w5 b' p0 G1 Y- S+ ]7 E- G1 O" t y& W0 U) S
提示:pip 不是内部命令
, b+ z; X# L! u% H+ w) o* L# f你python环境变量可能没有设置好- n, L$ `' L/ m# t; o
有安装进度条显示,但是安装到一半出现报错了5 t& A" _) W G' ^
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
& \2 ]( O U0 S: U; d K: Y/ ~- Tread time out 网络连接超时 你可以切换为国内的镜像源7 u; O3 z) I: F
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块* ^4 `6 z" Q1 ]' `* n! D) i" m
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
9 [9 B; M3 r6 Q" n( m. G2 L可能安装了多个python版本8 |" D' O3 P+ D5 z+ M
安装一个版本即可8 W) q g0 l) z% q3 T; L
Python做爬虫到底可以做些什么呢?& h2 }5 O, r& [0 ]# k- @8 u
$ v9 D# }. z/ r$ t4 B; v4 d% W
! E( v3 V7 H! J+ `$ k常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
5 y' G# _- k! Q, W- y12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量; X; A& g5 D+ s+ v6 d* [# Y9 \8 ?
可以刷课 可以刷网课 自动 还能自动批量注册账号) N( Z5 |4 G9 M1 ^
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
$ g7 u4 K! _: K- h1 u普通B站视频可以爬 番剧是需要会员的) A$ }. [2 i6 E$ r2 N9 u+ \
3 t' h+ o9 }; f
; E$ Y4 j: L2 Q9 h: G% d/ A爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
4 j. V \+ e& m) s/ A& L; I0 U, \8 J0 K+ {
$ n6 ` g5 s4 O$ `7 ^
1. 确定目标需求 (弹幕数据 那个视频弹幕)# m! } ^2 }% p# \5 g( R+ ?! P
确定了
* f/ H e6 C; |5 P. W" X: H: }2. 找数据 (数据的来源分析), v! s* [! x; Q: h& v; H7 J
简简单单 找到了% T) X) F: p7 W+ Z+ w
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头): E) U6 ~9 Z2 S0 {
请求方式: get / post
2 S" |. l5 M7 J" X' x9 H; Q9 Z 请求头:
2 `3 v9 p# z4 p; C https://api.bilibili.com/x/v1/dm/list.so?oid=376200196. G2 b" `; x: r" |$ d) O, x6 M
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)- X4 o& C1 Q$ c5 r1 ]
4. 获取数据
9 D! M7 p& w# b2 X 文本数据 response.text 获取网页源代码+ v/ D) o5 V& u. @* y9 c9 R
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多# m4 A0 a) Y6 T, ^% u0 }
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 / q* V3 R, O! t& w) v
5. 解析数据8 t# `+ Q! T1 l# J( k
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 : J0 ]. ^8 B3 ^& W2 k5 D
6. 保存数据
" V8 d; ?1 ^) F+ P: Z1
3 ^, e( ]# u/ r* c( q( v6 Q$ ]2. ~, Y4 O9 q/ d* s
3
$ q- Y4 T0 m- e* Q) i49 L# _9 x- ]5 ?6 g
5* W1 M/ R+ ]8 m) Q
6 `& V& d. U* ~* W! J, M: I
7
# s2 c# x2 S2 v: K) p" p8
& k1 d+ R. p5 x8 ~8 o0 m9
* s! m5 a' w& d2 {/ b10$ C; L; O$ z: j
11
; K y1 G h. c5 h8 _12% [; \3 @3 y' r- A
13& W* x8 ], q% h+ j. q9 N: `
14/ B1 X5 L5 }( d, P
15! a! b% A- U3 ^4 E5 E
16
' B% J0 r- u9 P" J& @python除了做爬虫数据采集,还可以做什么?; H3 j& l& a: H2 k) p
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
8 f& h3 y" B, B, w& p5 F* f: i/ |2 t+ e. S/ m
, y+ g0 W, @2 z2 K; T) N/ B" g
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K% z$ B* c8 _" r
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
' c- }' H( k( x我可以做到这样么?
$ @% Q8 l) `/ S2 g( P1 f4 m0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;5 a9 v" K2 C5 b: }9 |1 ~
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
3 l( V. K) Y- H% t, t4 @, _+ l3 f9 T5 I
( j3 P+ q' i6 B/ F
爬虫开发(脚本)(就业/外包) 可见即可爬
. L4 B# O, y$ `. w- c* ?5 t虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
7 O4 P0 S! y t; V2 R很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
2 x' s; a. t. w5 _/ f6 R' T/ L) M之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
4 f/ {2 V6 A5 `; e! D
) o! E" k) P) y* F# F {% i: C- c- p. \4 h
数据分析(就业/外包)
& _4 N8 w, l* d. b* s+ q( z( B- ?) \+ f" E, g
- W# i! q# E( Y( }1 h# d/ q自动化(脚本)
! [6 X# h3 V. u+ K; J
1 @" A+ b: K9 ]( M8 T, J& o- a2 ~. R) o! j" ?
游戏开发/辅助(脚本)
$ S" [: R- X" z5 j8 g! i0 H" i- A
7 F: x4 u2 q* \$ n5 C
0 ^" V) Q" t& `7 g9 E8 R: ^人工智能(研究生以上学历 要求很高)
/ p, ~( v* a3 m1 }9 M# _" s Y
7 g: j7 M0 ?) F0 N1 P" S# l3 E$ B. M' h% d' s6 [1 q
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。! l+ S. c0 r# N) B+ t8 D |
* G" D# e1 u- E) u r
) |- _. ]3 ?! A8 K. l; o我们开始正题吧
/ s% H/ m: _- ]( o; `5 u. c i) {! |/ P6 Y/ W
* Y% f/ R2 f' C! O2 G2 G爬虫部分:. O1 o7 B7 ~6 T" B9 R
发送请求 第三方模块 需要pip install requests1 Z; y. r" u" ?# n* j: Z$ w
7 h# [5 { v+ d. C' _ A( i, j2 O% X, @; C7 o
import requests+ T# i% P, ~7 N2 Y1 d4 x% m
import re # 内置模块
4 h" r; _1 ~; _$ \
! a( Z0 F6 x4 L! M9 b( g+ m# }1 U! X- u/ d
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
3 G& O/ S. k/ A4 e! z( h3 J1
! q4 B$ o" G0 I# C2' i5 k" { ~4 n9 O# {
3
. F1 Z; C) P- o W- o* Q4
* V2 u$ I: G V6 f请求头的作用就是伪装
9 Z& p% G1 s" z7 m3 M1 l, [
7 i" j7 h. |; t/ c( W7 @7 K+ ~- u A) U2 h7 P
headers = {
0 G U% F7 K: P. z2 N '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" l t+ `" Q; p+ ^9 L, Q6 p
}# O' p; y4 V% D
1+ [8 w: ~4 v7 Y1 H# m' \
2
4 @# n) D" |6 H) E* Y4 i32 T+ r: h- [+ ~
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
. N: I" g/ j% L' n0 x函数传参" \ j& `3 O3 e
1 a+ v( J$ W& [1 I& L
( v$ G- |5 ^0 J3 Q8 d! ?, c1 yresponse = requests.get(url=url, headers=headers): ?9 q8 {# k8 |7 q
1* N0 d, R% k, N! W1 y: a7 O! H, p
<> 对象 对象意味着你可以调用里面的方法或者属性
- r* ]/ w" O9 W9 J200 状态码 请求成功8 B' z) q& l. ^. w
获取数据 文本数据
+ s+ z! Q4 k- a3 a. x& D8 A自动识别编码) S/ C" ^8 c2 H( v
- R- x& G f2 s9 h
& @0 l& ~* } a' u- j
response.encoding = response.apparent_encoding3 z' Z6 P! }* ]
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)' G& q$ o# T- c2 m5 |) a5 d
1/ `% s* |8 L. E! Q
2$ h4 F+ H" ^4 A5 V9 P8 T# w0 k
content_str = ‘\n’.join(html_data)
( f0 R0 F, l. ^* D( y# ]$ Y- n8 ~) t H& [( S! i
3 I& V/ d1 z& z! I- P+ G; B: o要列表转成字符串 ‘’.join()
1 E, i0 S5 [9 o; Rfor 遍历( W# z: g6 T) S# x8 C( R6 }# X
保存数据 保存字符串
! o: q0 n! b+ Ofor content in html_data:# G3 F9 T6 K7 V: D" p) k
# mode 保存方式 w 写入会覆盖 a 追加写入
7 z" U, [' _; }* x: Q. v5 t+ C! D with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
# g: ~" m' Y$ `7 `- P7 o f.write(content)
' r) ?" A+ V% |& U' w7 N) L f.write('\n')5 E2 B V/ [7 S* g
% g! d: |5 V; v; F% B. X
0 ^# ~# h ?, ?8 J* V8 [" }# print(content_str)* D0 i0 q) J+ _& Z9 I
1; h c) E" n: E) W! V( w3 o9 h
25 T& W4 ~5 t4 m; ^% T3 c
3
: W7 h/ ~* U! X4
) F/ N% w6 w i9 k+ n* G5
4 P, d3 z$ p, N* m: }6, y4 v' f l+ @) \$ C
7
9 b4 R: o' m: K' G爬取结果& m- V$ |) x$ k* Y& R& x# l! ^ \
( Y! I$ O3 w+ x/ q8 T5 s
0 O' O `0 f# O# A \( t0 n W
" R" U# R1 b, i$ W& m% Z
r! r. d1 {7 C% O }8 ~# l然后我们再来实现制作词云图部分3 q2 Z* ~" l. K
+ @/ T- A5 X/ C/ T
; h/ O7 y; o I8 e1 X4 x首先要安装这两个模块8 h4 `8 S* y7 U4 B9 k! W, q
9 r9 `- X7 _- t6 A4 t$ w
% |9 c6 q4 u% Y% u% I' W
import jieba
" J- X$ m* P' B: f4 v/ X7 mimport wordcloud9 G* k$ q+ H; M, K, H
18 n0 W: q) R" u- x5 O5 w# S& Y
20 l) {3 V- A- O* L9 v
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
0 x# R( a- m3 @5 p; z8 Y v j
4 z) h# l7 F6 ~# Y( A' V: L
9 R) K, [& u: s' Z& W5 z" wf = open('弹幕.txt', mode='r', encoding='utf-8')
6 K* m0 n! o3 ptext = f.read()2 Y) S+ i1 B5 O! i& _+ n6 E
txt_list = jieba.lcut(text)
# ~, x/ ], A( i# print(txt_list)
0 F9 U, Z& f! J4 ~1. j5 V/ n7 j( I( V- n" G
2
( B/ \6 u4 t9 T4 p5 u3
7 i6 r4 T% Y' ]" o3 v4; p- C/ k- P8 G8 G+ `
列表整合成一个字符串
6 \, b& c% P* z X3 ]+ G2 M: h4 g: u; D/ ]9 t2 j
! }& ~9 L+ q9 b
string = ' '.join(txt_list)+ z% V" r4 w, ~0 N5 m2 v q! V
print(string)/ }$ B$ v$ x& c& @0 k! y! F4 H; t
print('---'*50)
, v; a3 U# a; j, }print(str(txt_list))" z- W( y7 s; D# ^# g2 v; S. }1 G9 a
12 C5 w( k' s- I$ i
25 k+ v2 s, @# q8 ~5 f
3
: `6 c% Z* y6 f+ ?; t! p4
: H- x7 }8 I9 p' V' k1 e* M* h. j词云图设置
# |% L& g6 R& O9 {6 v) U9 P! X0 F' E; S4 O- s
5 Y% i0 y+ v, Q! ~9 {0 x" |3 ]
wc = wordcloud.WordCloud() L4 d% _% `8 S! n: U/ v% L+ G2 H
width=1000, # 图片的宽
2 i8 ]& H0 Y. v! ? height=700, # 图片的高
/ h8 I6 s1 ]8 g/ Y) H background_color='white', # 图片背景颜色
* R7 z# k6 C* P6 \2 d7 _ s$ Y( M7 z font_path='msyh.ttc', # 词云字体) N# }# I8 L6 s& W: P$ N
# mask=py, # 所使用的词云图片
3 q' K# u8 P$ ?- u, g D/ U2 ] scale=15,
2 Y o \# i) Z- z5 ]4 Y # stopwords={words}, # 停用词# j |; @1 M1 b, A | B2 X
# contour_width=5,, m4 e q$ U: Q$ U) T% ^8 K
# contour_color='red' # 轮廓颜色
9 @( X( N5 w1 C* m8 n0 M1 y$ y- \, g5 Y)# O, `# b7 h1 f) ]: w; a- ^8 ?/ q: r
1
& s3 _9 N& R1 r. W8 L2
7 |; A$ V4 ]% l) G! d6 g) N6 F( n3
2 w8 {9 s8 o2 S2 U$ C4
- c! u7 V7 T0 m# j* m5 q$ X5
- Z" `* f& d9 A62 |/ G3 J! s* `" @ J7 g' z5 B
7
8 b6 C3 D- M0 @1 {0 b, ?: a8
) @& f+ V; P1 v97 A7 ^: d+ G O/ U4 ~) N. y
10
. _+ ?% |& i7 j11. F5 F6 S' u- X# r1 [# D* k
给词云输入文字' i' c; @" R- s) l, W
/ C* a8 u3 S+ h7 t
) _% H% ?1 [) G
wc.generate(string)' [& B" x6 c! x. h
1
3 B+ j; n0 Y b: y词云图保存图片地址
/ ]) q( [* X O" \- ]- x6 ~- A# U) M' }: v7 X2 N0 c: [
3 T) o) V3 T8 m
wc.to_file('output1.png') C1 k u+ {" F0 w
16 R2 y$ \2 m; M& R2 M5 K
词云图的过程中有点慢,大家不要心急
4 _& Q6 w$ J1 Q: X4 ~& |4 f# }" ^3 K5 ~1 B' D6 u
# G/ U2 t) ^! _1 u( v) U+ d
这是最后的结果
5 S7 L$ E' j) w( z0 N/ v6 W" \2 H, l) R/ @ _$ ]& ]" o
% Y/ Y" H- c, F, n; j
没有加停用词,所以一些无用的词比较多' G5 u* b" M1 z4 X
" I# M& t4 h2 T$ w: L4 L
- t$ A9 i- W: S1 h: c5 Hstopwords={'了', '啊'}4 t2 a0 l v7 J% Z+ @' u! ?- [3 C
1
& H) P% D; o! Q3 s# k4 ^5 B, B# ?把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
- j- S4 G, g0 E! v1 `我们再来看下
: J$ g8 a/ P, }9 N3 i! N! a* s6 E, |" A. O. q% V
& a$ U( Z; k" a, _: G不知名网友:666666 牛批 老哥我要学!!!
/ J. D0 p7 v5 u) j/ y
$ I9 g" p* V* B4 H6 I1 m+ b% F- q/ q' J2 c9 ^
6 ?7 S1 E3 f" V! d' x' a
! p2 B5 _8 f. n6 n9 [————————————————
1 u c" k* o/ Q* f. v; Z& m版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
% v S/ H0 b& D( J原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
8 Z: f1 d, E) R+ v5 M* m: {) \3 m8 G
) s- g" x5 U! f4 | |
zan
|