- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563280 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174207
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
1 N" n# u6 k1 X8 U" c- N用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!% `0 X, X. Z7 [6 N2 M
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
- _, q& g( H2 k& m康康大家都怎么说!
. L5 g" U) @0 s/ G: w# T- T u6 k) r0 A! r5 q. t* |6 q
3 h- `2 X3 c7 V) s( ]
2 u& h$ _: C% {% M1 X+ Z5 X
. X' [+ j) }2 L) s* e ^开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。5 [/ x# O9 `: `9 o1 ^
# ~% I% W: c, U5 H% c2 |8 e
# B4 A" `% i. \8 u: {
如何安装模块:+ G4 S' ]7 ~5 R% _& V
1 b e2 O% g: ^
4 r {1 o2 p! s) R+ Awin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
" y7 h& v6 B9 |3 D: N2 Lpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车# A/ z- |4 l3 V! z3 R) ~
如果模块安装失败了,可能是这些问题:
0 s& P& T# h4 I& F. J' z& `% z" J) F4 D3 W. d! }
7 k9 k" t1 y- _3 F
提示:pip 不是内部命令$ ^1 w8 n3 \% [( d: _& p- b
你python环境变量可能没有设置好
f3 \0 _; x9 {: V0 B* |有安装进度条显示,但是安装到一半出现报错了4 s$ f/ z2 F# h7 g, m' x. w
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB1 n! L7 a) V& b
read time out 网络连接超时 你可以切换为国内的镜像源
5 s$ [! }3 `& W1 q/ ~明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
- Y1 y$ ~, R9 H; P4 R0 r, t你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
$ q" N9 p T8 A( O4 A可能安装了多个python版本
2 D1 E4 P- y. \0 n' w安装一个版本即可# i. {5 C# ^6 R
Python做爬虫到底可以做些什么呢?
& m3 O* x& k1 B8 U" k
+ _. d `# `2 M* O# m. Y) d
7 R- q) w! L; t% ~2 n常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…2 f( W: o V0 z: \6 z
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量: D4 m0 D7 [* g
可以刷课 可以刷网课 自动 还能自动批量注册账号" r' m4 Z1 A" P1 g
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …* M1 k+ @4 Z: C$ F5 V
普通B站视频可以爬 番剧是需要会员的
7 j4 e: \2 r% a9 I
' Y' `8 V+ J |
/ c9 I# [. V+ O" ~8 k3 e, a爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
j+ g8 {0 A7 Q$ {
& J- h' V. s& u" [, Y/ g8 s p' ]# T% j0 {, ^! h
1. 确定目标需求 (弹幕数据 那个视频弹幕): G9 S3 k* }/ U. }0 Z/ C6 b
确定了6 g7 a) O' W# G3 x/ p
2. 找数据 (数据的来源分析)/ h# K: i- `% A, q9 C2 E6 S" `& }
简简单单 找到了$ ]6 t6 j8 [' B; e9 D
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
% o' @! T; z1 j5 I 请求方式: get / post
: t" l. p% C) x s- D+ | 请求头:
) a$ X4 a* }, x" n$ r+ a https://api.bilibili.com/x/v1/dm/list.so?oid=376200196) O2 c+ C( ^( e! ?& F5 F
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)- d4 B9 x5 O0 {4 F6 h5 G, N8 ~
4. 获取数据 ) g- T6 M; b0 x/ v+ w) G
文本数据 response.text 获取网页源代码/ d! v8 s8 Z( h' E, [3 _! e8 q* O
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多" v3 l( v. S. l1 Z5 X
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
; i1 I$ g! P0 G. n4 G: U; _/ P+ S5. 解析数据
% v) ]) X5 W4 r% p( B+ `* ^8 r 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
# B) ^. e+ g7 L Y/ n! [' L5 B6. 保存数据; v6 X- C# ~. V4 X
1
_/ R! P ?- d2
3 ^; ?; U z1 Z0 T8 r3
6 Q3 P6 ?% u ? l q44 ?0 D3 G. \$ h3 C" o% A
5
h" G4 t0 t: D% L( J" ] }: ?6/ l# E' C" |! F5 \& E; a
71 Q7 F, e" O# @3 U
8( M7 f3 d/ X5 V& y; p2 M, d
9
( \- T1 u, _# W; ?10
2 S# k3 i8 Y( A) F3 W S) @# q4 K2 n11+ j4 K+ I; K7 S) ~! E" U# N1 @
12
q$ g Z1 a, r& T2 M, q13; ^( @3 Z: a; X; v1 |- u( h s
145 U0 n. Y( J" H* |( Y E
15
0 l) ]8 m% O7 [5 z' a164 W( k1 g8 V! H- B: |- q" Y( P1 q/ b
python除了做爬虫数据采集,还可以做什么?
1 R% x# I. @# T# B兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包): [! @2 V2 R) r ^
" D) |! a# D6 I) W' q W1 K
6 f" e* p$ u& K网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
# J E+ {& Z1 G' B" ]比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;7 _* P! Y1 o) I( Q
我可以做到这样么?3 r- S( D5 r& p1 n" k: X# @
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;8 H- e0 ?/ e" n) `: {" x
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
- c% n% R- v: x
) b. J. P, [5 [9 W- w: p$ o9 j1 \! @. ]+ w, ~2 ?9 R
爬虫开发(脚本)(就业/外包) 可见即可爬% I' ~; k2 ^" F+ B, F
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!$ D$ B7 C1 l+ @
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
% o5 b6 }6 O; m0 E& M1 E( U之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!5 b$ T3 d5 g/ U; [8 ^; f
0 A ^4 E& {6 e6 [. ^0 B
$ S: F6 R1 x5 ~0 M7 R' S数据分析(就业/外包)5 q, y# \: t& g7 W
; u8 W J8 [0 k3 z% e; X5 m; {$ u& t! v
自动化(脚本)! q) X/ j7 Y" t, e/ f& |: F2 P% L, V
! q# `: L6 L2 e2 Z {1 A# \
: w) C( U2 Y8 d0 Z( l, c8 P8 m$ s! a游戏开发/辅助(脚本); f) H1 t9 `' D( i& @
, Y/ b1 |3 f3 W5 o! M
% X" ` D# [ H( \# M. J
人工智能(研究生以上学历 要求很高)- R3 w- H) p) P8 \- u5 C
) D& d; i' F. W
, C3 W, b* ]$ g) J7 _
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。, p: W l. l& Y& p; y( I
5 Y, i! r( W: p0 [3 J8 A8 B* j8 T& U6 i0 J/ ]5 q% c
我们开始正题吧2 q" j( y& x: C+ h7 T
/ z, b7 k# J7 V; ~) ^. d# G* ~& h
爬虫部分:
( d& }) A1 _& q8 e- i4 c发送请求 第三方模块 需要pip install requests
- F6 |$ Z5 V& }' c; K3 d1 V! M* H" u/ [- A0 e( q4 K+ i
7 j1 a& j' h# ^5 M" P( Qimport requests
! V! |. X# D- E( wimport re # 内置模块& N @& \8 ?( w; g- c" }
0 ~' M; `3 m0 y! e$ N$ o6 B7 V7 T3 ~' }1 R `* j
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
- E" Q8 x/ Z* ]5 v1: W+ q; n& T0 z( z, z
2
; A; H7 w# o: m; v. M9 `* S3
/ _$ a: d0 ^7 W- Z, J) m2 |2 p4
+ P; b) y! k7 K2 F% A请求头的作用就是伪装0 l4 l" V! j3 x# X4 }: b6 h
7 w9 l3 D! b: n3 D B8 x$ A' `0 M o
% r; x% c% B; v. u! |/ F3 c
headers = {. e8 W& v* J* M% 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'$ f3 P4 Y: L) O5 e
}
6 d8 Z* c! l; n3 ?3 [2 Q1. Y& S: p/ z, A3 U! e* G- j
2
% Z8 k) P0 i* l6 d3
6 Z2 f3 \8 `4 y* m% |模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
2 Q2 P( j% Q7 l- `5 ^! r A% I- G函数传参: ~$ ^0 l/ ^, u6 y7 w' B
j! v8 p! p' u. y
" P, b r: V: u5 y e a) Y3 M
response = requests.get(url=url, headers=headers)3 Q' Q+ m: d# E9 n8 E Q& t
1
9 l9 S' V+ H. A$ z3 n2 t7 x<> 对象 对象意味着你可以调用里面的方法或者属性
* X( c+ Z) G0 i* d$ m4 h200 状态码 请求成功
& I! Q9 o7 h0 R4 J. S6 B获取数据 文本数据
- ~; _) d" q4 H/ `4 {8 e. {自动识别编码
' q( L8 Q# \& d* B
: S( V; z. W3 n3 ~2 _8 W) G8 y1 V, ^) Q4 P: |0 h
response.encoding = response.apparent_encoding1 _. y2 K9 D7 F" l# K0 k
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)3 W) }7 g" i+ S! k9 E5 t
15 ?) H- r8 z" ~- t% J% G
2
4 T, W5 M1 m( Z$ _) o1 s \content_str = ‘\n’.join(html_data)
- k0 n9 k" ^* `" }
5 C& H3 R* l/ E
" v+ C: P( y' G1 p要列表转成字符串 ‘’.join()
1 }5 l6 \& }" T" K! `) I! Vfor 遍历
0 G% ^. G- o) T3 f5 s8 o( g/ A保存数据 保存字符串5 Z# J5 ?4 Y7 F8 M; r
for content in html_data:
) O! ^. h; v2 A, C( x5 @, [ # mode 保存方式 w 写入会覆盖 a 追加写入% ~% B/ @9 j% G, o2 ^3 f
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:! V% t5 t5 N6 J4 g
f.write(content)2 M! W( C; z! ]+ c
f.write('\n')
$ b! |( w2 g9 X8 y0 ~( v
9 X: S( H& `* ?! L' [, o" `8 Q \$ L A
# print(content_str)! l6 O4 s! z. I, h5 k5 B" u; \
1
% _! P7 V6 K) t" `; V( `2
' Z5 f6 s+ O% G- N9 a3" n. i v# _9 s! N5 x6 E
4
; m( K5 A2 [% r$ }! ?' v5
) U9 e& w) O. h# r4 y# k& r6
" z ~! [' _7 u$ t7
& Q" }8 a, B* e$ J2 Y% Y- i$ `爬取结果9 P9 ]7 B$ H$ A+ n
, o2 [9 E- g Q6 T
. s) K+ M: w9 W
+ H2 O% X- D% p8 `: q( V$ e
& {7 W+ B. N2 L, s0 Y+ s% A然后我们再来实现制作词云图部分2 \ j1 H- V6 W5 e% s x2 B8 ~
% g6 f) z3 m. n9 W5 H) d2 b# p% q, p! C) o. Z1 o
首先要安装这两个模块
$ Q+ e' j, P/ I) s( ~- o! N
) W W1 U, X2 O, |: I) a7 M4 s' Z" b8 E- q" ^8 [0 ~' A
import jieba( I0 V, O! a# L/ a
import wordcloud+ I/ T! S. ]# Q, L; U9 E8 ]/ t
1
5 g8 |" v6 G+ E2
3 h, N3 i0 y T& l一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。& o: U4 W) ~* ]8 W- O2 k
+ H4 C |* m; R2 m
7 u1 Z: {8 ^* F7 C) H; c
f = open('弹幕.txt', mode='r', encoding='utf-8')
. N' h5 y/ K/ {3 B/ L+ Vtext = f.read()& U3 V, X. }1 U6 n3 M5 P$ N6 M' N
txt_list = jieba.lcut(text)+ o1 s$ U1 X+ `: u' C
# print(txt_list)5 Z; ]9 T9 f+ C3 x
1
5 F: q+ [* h6 V' e6 [/ _25 _/ Z0 K4 n- S
35 j3 s: t* k2 X! s x) { a6 h
4: q7 d7 t e5 Z& e3 p( ~
列表整合成一个字符串
5 b, o( U, l" ~! H3 g3 r3 p2 h7 C+ ?! [/ I
- P: _# N8 i0 W- v: F3 i
string = ' '.join(txt_list)! k. u( ?" U; S' O+ k! C% n
print(string)
! G" @$ \: F4 A+ W+ ]print('---'*50). a- S7 P: s9 ?- K% I
print(str(txt_list))0 \( ~. P7 c0 N* D9 f
18 i9 Z# X5 W+ ]# K$ Y0 a, J( \
2/ x% c" Y1 W. x$ e2 W6 Z* B
38 x; E+ t, s* @0 x$ B" O, Z
4$ N/ f3 d2 P$ i) s7 X
词云图设置
! z! D! v; m6 I6 {6 D
2 q% Q8 n: ^. T; L0 E+ P
) {+ }5 Z L; N, v# U$ L4 |wc = wordcloud.WordCloud(( E1 ~+ k! q/ w3 K8 ]! j4 q
width=1000, # 图片的宽& B4 a' k1 D1 }& z& t/ Z
height=700, # 图片的高
. J1 X" k: X" H background_color='white', # 图片背景颜色0 k# V% L# B: Y/ t/ r- r6 @9 p5 D
font_path='msyh.ttc', # 词云字体
0 C" S1 O2 W# x8 H h # mask=py, # 所使用的词云图片4 s4 L7 h& Y8 `+ p
scale=15,5 Z. X+ \' a, F( {6 T |
# stopwords={words}, # 停用词
8 X$ F. f- x$ W, S # contour_width=5,
& r* a: \$ p9 s# J' {/ q # contour_color='red' # 轮廓颜色1 {6 r6 V( K v0 q" C: p
)
$ t: Q! Q: M. [: N% H1
- c% a4 v$ O8 ^& ~2
$ N8 J' {; H+ f- i' ?2 _9 e32 S) U# R& v4 b. }: G3 d; u: {
4
! `0 V' e; A) {50 C* w: Y. I+ i, j3 Y
6
; N7 w' Y3 o' d5 }' j6 o$ }+ _8 u _: W7
" }0 ?8 w9 k2 ~$ h2 @+ G8
* f5 E; f2 Q+ N- J. o9, e- c* s0 H* Z$ Y
10
* I# c# e; k1 A11/ ]* D. \ l0 e. W& r$ `
给词云输入文字8 |* _; E# _2 ?% [, T2 p
# v; F+ k* u, j
0 _' L+ L3 A, u# \1 qwc.generate(string)- H5 u0 M5 h2 P/ J! ~3 t) M: b
15 @- j# b1 H* p- t
词云图保存图片地址7 O4 @9 D9 l# n5 m
* @% s7 ?0 q- v9 P, y5 f/ B8 }7 m2 Y
wc.to_file('output1.png')
, v' ~ X6 w5 j _13 m }/ i' P+ y* C. H
词云图的过程中有点慢,大家不要心急- y& \/ e+ }' }
8 I% A. r$ R" R9 Q9 }
; i) C$ R; ]- |3 h8 g- L
这是最后的结果/ F" U+ s7 j) [6 `6 F4 n
# f% _2 P6 p0 h5 F# P
8 `* g2 X* W [2 E9 v+ E, |; r没有加停用词,所以一些无用的词比较多# @6 Y6 v$ \) B/ M7 C( C
+ E0 _$ ?/ t' O: k" ?: d9 U, ~0 `
6 ]) D3 k( k5 h* l
stopwords={'了', '啊'}
$ J, [7 k0 d6 o1
$ r6 m' a' l) e! Y把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。, p1 v$ u% {: t" Q) V' H1 `4 J
我们再来看下- H- G% T- T- }1 T" r% u' O7 ]
. y& Y7 X6 X" `; J: N4 G# t8 L4 Y! j( o1 c( w6 W
不知名网友:666666 牛批 老哥我要学!!!
& ]; b+ ]. W* {+ A8 {; ^# \" I, ^7 s7 D" J/ Y# e& p+ E
8 D& F1 q$ E5 t$ U" q) d" T5 V
# K {$ z# g; L1 d5 a% a$ F- Y: e$ ^5 {! ^' _" k/ g9 A
————————————————5 d1 H+ x- x% O; R
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
. \+ x. l& g; F9 w' G$ @- y. N4 A原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
. l9 d4 L" `" \5 ?& {8 L& e* r& P* `% ^& m
3 l1 |) s: a, m: }: P+ @
|
zan
|