- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565615 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174907
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ @0 z- V4 M/ o# [# \& V用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!, B( k; s/ S% J9 h! ~$ E
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
# }. Q1 O2 G- D- g8 w A康康大家都怎么说!3 `/ N8 n9 V: }3 |: Z4 Z
6 H/ |6 m j3 c! Q; |' o; C, i
t" @; C `2 N% |( n0 }* F4 z7 w! M* j0 p* T A- p
2 T+ j: a* k) E/ o
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
+ `* C, f2 z' P& C/ d9 O
* U$ O H) L8 P: p- ^5 }* Y" L9 f& N/ C, f1 u
如何安装模块:
- d# F1 L( ?) f+ n, K Y
" L9 u1 a6 i, N2 m+ W; q$ j, n! [- \/ a: L$ w; \: ?" o' Z6 x$ U7 S
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车" `! ^# D8 j) m8 G" j: _/ h
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
9 \2 X) m5 K5 @7 o, z' [+ b! y( b8 d3 ?如果模块安装失败了,可能是这些问题:) v# m! U& g9 H% a1 u# p
4 l. K, d' H0 ~5 k3 I+ P- U- X Y1 a9 L% V9 Q
提示:pip 不是内部命令
* ~/ F$ ?$ o$ [4 S6 i! g7 f1 ^+ l你python环境变量可能没有设置好
9 X3 u, S' r$ t X有安装进度条显示,但是安装到一半出现报错了- u4 C0 j% }0 O0 d. s" ]
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
l8 c: m) I# r+ R: j$ t; Oread time out 网络连接超时 你可以切换为国内的镜像源
& Q2 \, w6 j& W+ t, A3 b明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块. O W& R* a9 N3 i8 w: J) U
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
* a2 R/ o$ b' }. g可能安装了多个python版本
% y- ?0 t8 B% X6 C# W安装一个版本即可% }; y; N6 i* v# e! ~' J
Python做爬虫到底可以做些什么呢?
' r0 m# K+ p/ P. s6 G+ g) \- k6 }
% b' \! }6 I- o, I% V6 |' u
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…* y( F+ u- d$ g: n
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量; [. T1 C# I7 G/ n5 t
可以刷课 可以刷网课 自动 还能自动批量注册账号1 R6 s/ Z: p' O* l7 P2 f2 d
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
0 m, t# Y( X S D普通B站视频可以爬 番剧是需要会员的# t8 t, k' q# o7 G" _7 O
G- y L9 [8 r
" e h, _4 @8 L1 F1 v* P爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
( ]4 R7 E& |+ U5 Z- H6 i6 J+ l+ I; @; p% \6 v; P7 [. r
7 q0 v; \: v7 @" x0 d" o$ H: R: J1 D1. 确定目标需求 (弹幕数据 那个视频弹幕)
6 N4 l6 {3 D1 V* \6 J0 o- p0 R 确定了3 P, j8 q; r+ d |0 f% l F; I- k
2. 找数据 (数据的来源分析)
* q7 M" w7 u) H7 ]4 \; Q 简简单单 找到了6 t/ v& j8 t5 G I5 I
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
5 A/ l4 K$ Y% M: b+ J5 u- X 请求方式: get / post6 i" s3 D1 }# J: f. W' H$ B
请求头:
3 W+ B s- y& r/ Y9 \ https://api.bilibili.com/x/v1/dm/list.so?oid=3762001960 Y. F/ Z) s% w" q4 Y' L
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
, U4 Y' U. }8 i7 I* ]7 Y4 m4. 获取数据 / b; x$ W9 O8 R
文本数据 response.text 获取网页源代码/ x( {0 l1 }/ D3 G; m- K% C; G
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
- v2 ~& W. g, o6 Q5 s 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
8 D( D1 {1 g+ l) v' E3 B; m5. 解析数据
0 Z: x5 q; b% s3 Z/ ^. S 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 3 ]' z1 d2 q7 w, A4 s; [* h
6. 保存数据- J) m5 D2 j) C! B9 {/ Y3 |, N' n
1
2 x3 w+ T$ G! U' ~; G3 \( Q2
6 m( l# |+ q+ d1 [0 P3
* m( e; @ M1 j. Z& Y+ j7 l45 \3 o1 ]) e9 Q0 h5 ^/ r9 g6 G } f
55 `$ ?% S+ T" e( o! r$ N w
6
2 B3 y, Z5 H% j5 Z. G0 k d( | o7, m) [' U0 V1 L. n" \ n0 r
8% @$ }/ v: m1 ^& E$ j5 Y$ K# L
9+ C2 ^9 L3 s0 u& s1 D6 r
10: `. X4 c' d8 f5 \$ F
11% J0 Q7 i" h5 d
12
6 j. B! s4 @0 w; Y! g& n2 x13% b! L; ?9 y" P
14
8 K* u9 I8 @9 C g9 C15
& e5 M+ x# Z2 e5 v. n3 [3 c+ ?4 [16' S2 F3 K, i4 t- O
python除了做爬虫数据采集,还可以做什么?6 G" z- B: d8 K
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
B. V: m" D; x5 A) ` d
( S7 f0 s% @7 h$ r# T# u, P
9 j- a+ T6 Q4 q& t网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
7 Y+ I$ W' h4 {, a. N比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
3 D' {2 \/ i. s- {/ ]我可以做到这样么?
5 Q/ D& F( W5 _% j; s0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;5 U& L$ G7 }3 ^% m1 B
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;: J8 ^- L) P- m) E* h1 I
o) L# J% \7 L' Z1 q2 B3 N4 |4 O$ }
* w0 X4 u0 C+ x; j' m爬虫开发(脚本)(就业/外包) 可见即可爬 u: }7 B: Y7 q; u
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!' u7 h9 f4 b! @* l3 Q) [0 x
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
% I- t# s7 k# u* M/ s0 o之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
" P; }9 @7 z) o
# J- S. u; l6 }2 I
5 z3 R8 c5 z* k) L% B数据分析(就业/外包)
4 @( {& S8 X5 @& z4 P% u7 j1 t( z" e+ b0 A
. ^0 N7 o5 |3 Y自动化(脚本)
/ E' X- [9 Y* a
. d. Q. ?- B9 s) s6 A$ ~. I% n+ W) w# |/ \3 N6 T( X
游戏开发/辅助(脚本)
- n9 U: i8 |! h
4 y- C* J# v+ n! e! R4 p& L/ v6 c) }: w; Q; _, J' M% ?% i
人工智能(研究生以上学历 要求很高)
/ V( O! s( E6 J; m! y. P6 G8 ?% H/ o! X, t* i9 w
P0 |, b/ R1 f# K
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
% _2 s4 J; Y( Y6 W2 A# _
4 ]; c$ u+ S& M9 k0 a5 Y* |/ ]
# L0 J, B+ T- J V) a. y3 Y" z" U我们开始正题吧
: h/ q- W$ I2 Z% e# p
" v9 z- k# d) s5 d1 ^: D9 Z4 u# v. U- N* e
爬虫部分:
/ w- O1 e' i) o6 @2 L+ F发送请求 第三方模块 需要pip install requests
1 I! x* {- v( A; j5 M V3 q, [( {- y
9 T# Q8 ], m) aimport requests( o* _9 n( ^4 c% ]* x. s
import re # 内置模块* B) f* b! ^6 ~, f1 H6 H
) [- I/ C) K1 X& ?4 s( }
3 R3 ?! J$ ~( f* Q- R7 h7 h# E! lurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'# w8 m7 T1 |, c3 N
1
$ }4 M9 N D% L& N W' X& E5 @2# }- `! i. n5 T0 P
35 t1 C3 J a$ W9 s3 T
43 Y; l* `: O6 o/ x9 X! o `$ W
请求头的作用就是伪装! x% p1 ?1 p& V
4 s" o% {. H, `5 \# R4 c
9 M7 {9 R3 h) }4 U0 Z0 t; \headers = {$ j8 w; j/ t* j7 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'
# D0 A" ^, G& ?7 @}7 L' L2 S+ v7 M+ m# K$ D7 C
1
/ Y3 F0 f9 ?/ a: W B2 g29 ]" x0 |) G' [( ?: N
3
0 ]( ^. Z/ S! Z. v/ I, g- W模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据8 Z6 T* r% B5 t" f
函数传参, l5 D3 ^0 |+ U1 h/ d+ O$ | v" D% Z
/ J& O- f" |; _: m6 F8 j4 A( K$ J' \
( O6 n& G3 b5 f# E: w
response = requests.get(url=url, headers=headers)
) N! J! Y( F5 F' t8 U1
# X9 l; j; ~ g6 J2 k, Z8 k3 M& g<> 对象 对象意味着你可以调用里面的方法或者属性% P6 {1 ]; U' t- P0 v2 I- @) {
200 状态码 请求成功
& g. S0 Q# j( {2 p( r3 e获取数据 文本数据
. I: s' n" E7 }! Z( }; b$ A& h自动识别编码
5 p3 H: h( Y, V: o6 d6 |# n/ Y& R$ u
4 v! S0 U6 U$ Z& @5 S1 b% O! D) c2 Z/ I. N$ V
response.encoding = response.apparent_encoding
, S8 P: v! w, e% c& chtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)$ i/ x. {; ]2 @1 ~
1& [* {5 D2 T* `: T
2
) S9 M3 ]- m* z2 R* Scontent_str = ‘\n’.join(html_data)
8 B8 E% X, K* E3 I7 H+ }0 A! W6 x5 u1 `" f. R1 M2 ^
2 m7 @# q. h# @- V; {: Y要列表转成字符串 ‘’.join()
) }! V2 p3 L. d5 W0 L$ T4 j$ wfor 遍历
6 L! Z j' S' a0 n% R# l保存数据 保存字符串
, D6 t( R: X* @4 Bfor content in html_data:
1 f( L8 B) z+ K: d+ E # mode 保存方式 w 写入会覆盖 a 追加写入
' X( ?8 z: D9 G, y$ c7 O0 M with open('弹幕1.txt', mode='a', encoding='utf-8') as f:4 ^8 W( b, K: S* D4 s7 ^
f.write(content)' Q& f5 @* i: W
f.write('\n'): A9 W% U, O G. f( t
& k B, z( s/ [, y" A# e9 ?9 C' ~" I, o6 I( ] @, Q7 K9 D9 Z; K
# print(content_str)
( y4 I% _" V% U4 o m2 g1
; [4 T3 L: w4 J9 F o& r* s2
1 J0 G6 s5 f& J7 A4 ~& B3
: N! u. E& s$ t: m! ~4
# n2 X6 H) H! Q5 }) \5 _5 o; x5
4 Y' `3 s* n- }5 I5 B6' Q3 \( n& m. S* {
7! F1 g2 G0 l) r
爬取结果
: j# f( c! C) f9 S7 ]3 B8 i
& e( U! Q3 Q8 C C4 v* q1 H& L9 U, k6 O
2 R# ?. _; e4 J; A+ ^2 A V* c8 C; |7 x( l+ F2 s' X
& W1 i. ~' w1 V' d然后我们再来实现制作词云图部分$ [/ [7 _' ]' f) }. Y [! U' G
4 \4 V% u* I3 g5 Y) @/ l( [3 P7 ^8 I5 R0 f7 A |
首先要安装这两个模块. y, T3 d" V e. y, a! d( {6 B, `
/ F0 f7 C b |
1 T5 ~* {' B) c* z, eimport jieba$ ~; F& G2 ]4 N4 }' k0 t0 K+ B% @
import wordcloud# F( C; P2 P8 ]' t# c
15 A5 n# m# L: f. `8 u/ J; \% }
20 @* l- w- R5 [
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。$ P+ D: C) `6 H( z$ j; u$ d
/ p7 ^" I+ E0 y( x/ ~
( K* d, o* I+ E$ J& Jf = open('弹幕.txt', mode='r', encoding='utf-8')
* q* f" y" o$ h6 ytext = f.read()
+ Q0 @+ s$ u& D; L0 _txt_list = jieba.lcut(text)
) { h; J( u( J" o( |' {- u# print(txt_list)
) i* [2 e4 v6 h8 k! [+ L4 K1
( t7 z" L, j' A: T* G; Q1 {+ Z+ e! q2. I% O0 v" C2 E; `7 ~2 l
3
* B3 u( U) ]3 E49 l4 y; H& n. h
列表整合成一个字符串
% ~4 |$ I. V7 ]* l, K- C
' ]! y& J M4 I+ ?, F/ w! J7 ], Q) _ D6 ^& d
string = ' '.join(txt_list)4 d: Y& O- p1 f
print(string)' _ x& i+ `. k) b
print('---'*50)
, U' a/ o, R1 V/ i! _9 C; Qprint(str(txt_list))2 J/ v. [9 Z( l: |' @4 J
1
/ \3 T# L" m- k% B2 H" g/ h/ V- ^. s: g3 P
3
: J+ y4 H* w: \ S R9 v _42 @) U: }3 o7 K1 x" T
词云图设置- I% n9 Z7 |! B1 h
- Z! i" j3 \" i9 N
; S4 h" b# w9 X1 L* y1 m; }wc = wordcloud.WordCloud(1 C; m" ^ e; c% D; H) Y6 ?
width=1000, # 图片的宽
4 l# ?& z! _ ?0 v7 ~% g height=700, # 图片的高
. g$ w/ u" w2 U$ K4 h% r* R/ H background_color='white', # 图片背景颜色
, j5 Q- i9 P9 R font_path='msyh.ttc', # 词云字体
" I/ J$ a7 e% b- S2 F; r1 h # mask=py, # 所使用的词云图片$ v x, K% @) }5 U3 B
scale=15,# P$ E# R) s" A8 T
# stopwords={words}, # 停用词. |1 G7 `; H6 i1 v3 Z8 z
# contour_width=5,
, l3 r6 Q% \" g; W5 d5 a& ` # contour_color='red' # 轮廓颜色
- [# T! C# r) o% T)
4 q' \& Q* O j0 @, ?0 _1
( W9 E: h1 K; S1 L$ i4 G; f, I2# _" c7 f& Q+ o U; f
3# g$ ], U7 U1 G5 S4 ^3 L
4# ]( k9 t2 z6 U; Z
56 o- V, o4 m: u) J! |
6
, Q, i& a6 r u3 M& L A7
" `: A& n8 K4 M9 e- [7 J4 ] V& l- f2 {89 r. {5 E/ `4 r7 b( q/ G: p4 |' N/ y6 h4 J
9
! q4 _' v9 {/ ]" L7 p5 I10
: }7 a" U1 Q- r+ f0 L11
8 @+ b, M4 C5 ~! H给词云输入文字
0 A0 U) g& C4 t! j0 }1 `
* o0 D) p* k/ z, `! b2 p. F
; M: [& r+ O) Lwc.generate(string)% R2 _8 M: T" D2 \
11 u: O& O& G% w7 v
词云图保存图片地址
" D) ]: Z* n' ]$ C
, g, U- m6 N6 W: F8 A8 ?9 z P& I3 b1 n& A1 I! K
wc.to_file('output1.png'): v& r4 u$ N* Z) }9 S, ?9 n
17 I9 G% q* D$ s, t
词云图的过程中有点慢,大家不要心急
& F8 h \3 s! N1 j' V- |$ _ F, j9 Z/ e" K' @- u: M# t; |
# ?$ L$ ^- w1 V- U4 {9 p
这是最后的结果
5 t+ z/ b4 [$ e; K2 V! {0 T) `& I+ e/ _4 K! M. R; F8 A
1 U. \8 ^8 @9 s, r/ U, W- l5 I% p
没有加停用词,所以一些无用的词比较多+ w7 C8 D6 N* }, y# w: H
+ L) D1 @% w7 r, s% r" W8 k
{0 v: P X- \8 Y( n
stopwords={'了', '啊'}- [) e5 B3 `. r% W2 G3 v
1
5 c3 ~: l& e6 V& S1 M! b0 M9 U把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
7 [+ I! _/ B* I: H1 u我们再来看下
9 O% V* Z6 C8 C% Z1 l. E, k8 A+ s( K; S' \# K* i+ q
V% ^4 g$ C) _不知名网友:666666 牛批 老哥我要学!!!; l9 @0 d+ R# t! A+ ]. J+ w$ Q
5 {2 @6 F8 @. ]- w( s
' X; v0 X8 l6 v5 ]- K+ t3 q7 R. R- |1 m: ^3 y
+ w" X; q4 g# p; r: ~" w————————————————4 J5 G9 I* d; w
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。. G- x% N1 o# s! R6 _6 ?2 U
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907! F" A1 a' e- Y/ T/ U! d1 m
3 J. A- p9 Q; y# z
6 `7 b' x. s! J! g6 ] |
zan
|