- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564703 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174634
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& m3 ^' _) W% X8 f- F; x用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!% p# V& J5 }* y1 {
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
* q3 C. t5 n: @6 d: J B: L, @0 i, k康康大家都怎么说!
+ Z7 p4 A+ j7 f) p; U* ], {
5 \" [% O$ G: n! z% C5 m
5 P6 h7 L5 I5 ?9 y$ p- e
' `0 m) s5 K# _# f; n1 `% C, o
3 b. E5 V" L5 K6 g开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。! l$ Z- b# g5 r% o" z: W1 g& M6 _
: S) S; l6 [ M( h: X1 j8 g Q
0 D4 k7 p' K" z
如何安装模块:! c4 a! q3 Q# ~( Z
5 q- _3 W+ ?' k* S2 Q2 k, j
9 n! v! P0 _! N; H7 _3 ]4 pwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车( w; `" O7 E+ h* B6 w# N6 H
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
2 g1 q. ]. P7 S$ }* E如果模块安装失败了,可能是这些问题:1 [ D! g" H) ~$ {6 C
: j* ~: O9 \, t4 q/ n5 J( x; f; G0 d3 a1 X7 T& I
提示:pip 不是内部命令1 L# Y0 V0 k. Z0 t* O
你python环境变量可能没有设置好/ P9 s* d6 f7 e7 P) j
有安装进度条显示,但是安装到一半出现报错了* Z+ i+ Z8 i$ q
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB' ]6 i, R8 V! R: X- O/ e; r
read time out 网络连接超时 你可以切换为国内的镜像源
% o& H8 ^/ S' V4 f- j i! `% E明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块 D. s; ^, c) g) n
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
" }' [* }; W0 s5 g; l" d可能安装了多个python版本# s# M+ \5 F, ~( G6 C, _
安装一个版本即可9 Q9 k" b( ~/ h
Python做爬虫到底可以做些什么呢?0 |) i, _8 R! @- o; a
- p A, y* r( k x9 U5 d1 A1 e3 U0 I& Z8 P- `* w+ d0 P& Z% `
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…$ @1 y$ T! V/ e/ [* G" w+ k7 [
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
0 d; o8 v- u& x可以刷课 可以刷网课 自动 还能自动批量注册账号& p5 h. q! m T
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
) v. J" E- y* O普通B站视频可以爬 番剧是需要会员的
/ j$ d2 J1 F4 ^; |$ z0 \$ a/ ]% ?
8 e8 e& W; G% \6 A' l8 Y+ ~: s% ?3 U, w% y
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)" V0 l* O! w2 k% E& D. }; e R% X# l
# o) ], B8 j4 }. u* Q% f
' i2 X: K6 q+ I! {% f
1. 确定目标需求 (弹幕数据 那个视频弹幕)
) m. |# i- ]' G6 d9 ^ 确定了
+ k2 {# Q2 Z2 {9 d& L2. 找数据 (数据的来源分析)2 j2 q8 Z" Q. r) r" \) D
简简单单 找到了
; p/ o K/ Q3 {5 ]3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)2 b2 g7 d" O, v& X
请求方式: get / post1 v- G" [' W4 h3 d. v# q$ e! \2 P
请求头:
: d" ]/ p# L- |6 V4 ^ https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
/ G; c; V) P# T- X/ _; t (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站), J* c1 i! Q, ?# K0 t/ ?
4. 获取数据 : W& c! r1 X$ x/ D g& M! I
文本数据 response.text 获取网页源代码( s% B: H" o/ @. A/ r
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
3 D+ B, |' @' Z) o( B 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
! ~, U* b @% F6 R+ _2 I$ S5. 解析数据
1 X' W( P8 o) x0 w 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 5 P% E C# s0 _
6. 保存数据
; Z9 _# [; W/ n0 I% t" D- {( |& X, D1% r% d0 O2 W) R8 d
2, e( Z9 e+ P( j# G0 W2 b4 n
3
- h; C- N: }! o4
3 \8 Y* a! Y3 u5/ |5 E. x: w0 o. `# C
65 ^* u# w& {2 h a( T E
7
$ K$ {" |$ c% T" X$ e/ a8 o' }$ E8% H* j0 @/ D* W# j8 k
9
8 n Y/ P2 `8 P+ M6 W$ w, ~2 n10) D% m; L* x x9 C6 c
11
8 N" J; B0 g3 r; b& ~0 o. o! ` U12% Q( C% I/ j7 `' r
13
: X3 B& H6 g0 z! b0 n( z0 e% B$ V14' I0 r. i q! L6 V$ ?: ~
15- B# c" y% e( Y1 m% X) g; |
16) J/ ^. f6 V/ U# g7 w
python除了做爬虫数据采集,还可以做什么?! b, O7 E6 t0 T0 @7 ~ D
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)9 a& u8 r( M( q! g7 m' g( M
5 v9 W7 s$ l& Y" i) K- ]+ S6 r6 G
( f) b# F; G/ t5 N3 F1 f7 {. C+ m网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K* T3 O' d. f, m- U* f+ C
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
@ g7 U5 ~( ?1 t1 p# d- ~# D& V我可以做到这样么?
+ X* l: t) P6 ]& G0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;9 h: X3 z) {) Q, Y0 R p
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;8 ^; l8 d7 c6 |7 C- M9 J: g6 `; R
+ y' _3 X* x& W% h' w
) \/ }$ k0 u0 F4 c' j x/ A
爬虫开发(脚本)(就业/外包) 可见即可爬
$ D b0 y1 F Q, r9 T虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
+ a* U0 d# }/ l/ T# T很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
6 C& S, N4 M" S% P; D6 F, a之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!0 F7 c8 W0 {. j, n1 Y
, T/ W0 V( l1 T0 }3 `+ i" l: B
- G( S. I' Y! I5 G6 J数据分析(就业/外包)
, Q- B2 g. W T
' Y* \' s. U* Q) ?( b
% Z0 M6 `: A2 k. d8 P自动化(脚本)" a6 O1 ~+ T6 E4 J' x
1 N+ y; p8 u" T6 W
& g9 G$ x( m h3 K% W1 ^ M9 y' L4 Y
游戏开发/辅助(脚本)! |. Q: T/ D- ^+ ~
- [9 T( Z4 J U- ~, Y o* O- D i* @) @% _3 V$ P
人工智能(研究生以上学历 要求很高)
; p& Q2 ]8 i; c' Z$ }
|6 X6 \+ g5 m) W! d8 q" F! W* X4 O. l9 E, O
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
2 h3 K& k0 p, c5 {9 o
5 u" w+ \, u9 y4 H( B6 V0 C, n2 ?' @4 ^" m
我们开始正题吧
. e. @" E( l; j4 q- i( r5 x: s/ |9 I% W0 M2 C/ g; h3 `, @
. _$ q, p4 z* j/ h/ n( Y! h
爬虫部分:
; t1 _8 k; `" W( t( ]$ ?发送请求 第三方模块 需要pip install requests
0 Z& _, J) l5 [" J
% B2 b/ G, m. O1 z" Q9 Z5 x; e1 d2 M% S, a; a, m2 m
import requests$ q2 r4 O/ Q! C1 |+ r* d
import re # 内置模块
" f7 o1 q4 B( H7 D4 n) d( h+ g$ V9 B% h4 s, C5 s, ?
% r. G( Y2 ~+ y+ N+ Q
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
, N: M: V2 q# P! E1
7 p! e1 F1 I! c8 @# K! x- X2 c27 a5 I+ P) D: p x0 @& Y$ M7 q
3
$ s! Q. h8 F* \5 m* _4
, b; C/ L' Z6 g6 z2 |请求头的作用就是伪装' H3 T3 m4 P( \6 K! q
# R" R! l! i8 D5 V0 r$ Z3 d' B
2 q6 a4 l8 E$ J5 A0 c2 B
headers = {& D, R2 r5 B1 i! a3 i/ z8 u
'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'
9 X& k: r7 X/ b}
$ J2 b( y* p) U! v( S1! E. r6 ?5 D2 R5 V( r n
2! }/ f9 C0 s1 ]1 S
3
3 Y; J. M) m0 H0 _模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
, U$ C' T* u; w- b3 @7 i函数传参
! v/ [" g! F- [9 Z! I2 f+ W9 S& ^0 b
4 b5 m" j' J6 Z1 N* U; A2 k/ Nresponse = requests.get(url=url, headers=headers)1 p; O8 N4 G! t- `& U6 P4 ?, [
18 ~2 x1 t$ G- ~5 z8 X l K
<> 对象 对象意味着你可以调用里面的方法或者属性
0 p- C% U' f2 @: \# t0 p* F# P200 状态码 请求成功2 V$ O1 F' P. b9 D8 E5 ?
获取数据 文本数据+ ?1 ?! Q U( a; T$ A5 t/ p
自动识别编码
, G ^2 Q- w$ P) Y: I4 |7 i: a* \/ M( R
^, J6 g; f& ]6 E1 D
response.encoding = response.apparent_encoding' V2 Z! \+ o: ?6 j' H* v0 y5 P
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text); q( T# p% Q4 T- d8 ?' x
1' t! ~) s+ i6 S1 a# ?
2
4 F/ h& w( G) U' |content_str = ‘\n’.join(html_data)
i6 A- W: t& ]1 |1 j R' _$ B: y; ]+ B1 L. P
. o% X6 ] z* f
要列表转成字符串 ‘’.join()) W% A b% g5 Y/ e, E7 U3 q7 q1 l \+ k/ b- Q
for 遍历) u) ^- ^ ~$ B; a2 C' `* h' w
保存数据 保存字符串8 m9 Q% q9 ^: a: Q) b( v3 z8 B
for content in html_data:
" U1 Z, J! v K5 r0 ]( O/ t1 n # mode 保存方式 w 写入会覆盖 a 追加写入
& Z8 u/ h! [( c* X; e0 Q7 r with open('弹幕1.txt', mode='a', encoding='utf-8') as f:1 X7 F# W. D2 P9 Y1 d! I0 [6 W
f.write(content)- |! |# U: E" F5 E; a' M' ?% H c0 m
f.write('\n')
, `, ]4 e" g0 C; |+ q! o! U. N# Y, t2 w: G `3 i. L! D) W6 O
7 v5 J2 P, w3 ]6 \$ u# print(content_str)
9 ?# {1 `% Q& ~1 C# f4 O1" b. C$ D1 K5 Z9 b
2
. t& o) H9 ~1 G3 C7 G. A* G8 F, N3
' x* @( G& ^) {* a41 c7 f& Z0 T; k3 ^/ R# z
5( @3 G- O- M Y' y/ a8 y8 Y
65 g4 b; _* `7 J/ D8 v- N! a
7
" |# l& x4 i3 h% r, _" `$ p. q爬取结果
0 p0 z# m; P* x+ O8 L; ]& J) s# Q4 L& n' y* E; V: |) h1 `
) I9 X4 M# O+ r4 N2 b' K% i- d/ @+ h a3 S: r% z: s8 z) A$ F
! i" F4 k5 i" ?* N5 x' y0 S
然后我们再来实现制作词云图部分; t' [, B5 [5 F9 j
: s& `( N+ [$ ~8 y! \5 s3 y
; I) I7 x0 }% U. W2 \1 [
首先要安装这两个模块$ Q- G" ]: i& ?; Z; X$ ]- U- L
& R# {6 s; H2 S- P' Q- h; p+ i1 L
( H+ T/ @% ?5 D+ M( f0 ?5 ?9 _import jieba
! w; @5 V" @7 S% n$ |8 Z. C3 i8 qimport wordcloud3 Y _: @9 f8 p& {& I( P
1
# E6 V$ i% b6 B! w! f5 m2! s" N$ H {$ Q2 D3 i# E4 S2 L
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。3 j$ y& l! x$ n ^0 G" {& m! c* K' r* b
4 ^4 H d( A. z0 e% j" p
4 V& `; T7 _" U% [* y/ Y5 O
f = open('弹幕.txt', mode='r', encoding='utf-8')$ r7 u3 `: u1 d! T' a+ s4 C4 D7 n
text = f.read()
2 Q3 ?: I4 i5 S# K+ Ftxt_list = jieba.lcut(text)
/ e: d$ S- Z! s# print(txt_list)
/ t8 X1 Z& p& S5 i1
+ e' y% A( r; U. A2. o. I* i" R, J& \! j
3% c* ?' H9 Q; k" [$ J
43 m8 y6 P, d# N1 `+ K
列表整合成一个字符串0 v5 R5 u- H, V2 \
. y3 z/ z$ o$ A* e" s
+ ^8 n3 M# |5 ]# r8 a$ f
string = ' '.join(txt_list)
/ r% [" F% b& M" Q- B- y. C* z6 u) T" _print(string)7 @3 w: x' M/ ~# R/ \+ c2 y
print('---'*50)& m) M/ }7 f) j6 x4 M
print(str(txt_list))9 X( p4 \ Y+ N
1
. i/ E9 c' o2 S( W2
" H: y" O! O5 \( G+ w: {3
5 Y. k4 P+ C+ `3 E$ e- j42 o8 S' m: U- D
词云图设置
. H0 k7 r2 h: f
4 i- f$ ^ H9 M9 g' p6 N& V+ \0 ]* E( F
wc = wordcloud.WordCloud(
) V2 A, B% _, }+ \4 s width=1000, # 图片的宽
7 M! Q2 _! H$ w height=700, # 图片的高
4 [; j% E+ l$ r5 @/ } \% p background_color='white', # 图片背景颜色1 @% ^/ a' b# X
font_path='msyh.ttc', # 词云字体
& p/ a4 S$ y, x3 q; V( ]/ w # mask=py, # 所使用的词云图片
# X U5 W( F# o$ I& p scale=15,
1 ? g0 n6 l2 L # stopwords={words}, # 停用词
$ a! |3 G! \3 y- L- s # contour_width=5,, P% c9 G- t6 ]* \
# contour_color='red' # 轮廓颜色
1 ^' W5 s9 p2 z# X9 I) e% U1 M& ^)
! B. @1 P. g, C7 D% P! c; B1
7 n# {& e' X" t4 C20 o* L0 ]; D6 G% a2 O @+ Z. e
3+ n9 w! n. R+ Q# I7 x
4' w$ v5 D8 n t! z/ O1 a t+ u
5. z( k0 l& j+ [/ g0 c' y
6
( ]. x6 c+ b* v; d% t9 T. D6 i. I- r' g0 f7/ M( k' U6 t+ {9 \; C1 U$ D
8, b" [5 A+ n# e3 i$ ?- [/ R: D4 {
9& _6 A* u( ^; w3 _& A1 @% \# C; c
10* A% g; K3 S$ s4 N4 y5 p3 K/ b
11# v& x9 j' U) M; ~4 r1 ~9 i
给词云输入文字
* k, O0 Q% F# ?) D) l
" e3 I. N1 r( A& H4 S% f0 j$ g9 m/ P' x, X! S: }) c+ w
wc.generate(string)
- D7 f) D3 X+ f, V2 p7 g9 t14 i e( s9 z- _6 y' @ W
词云图保存图片地址: {/ x2 ~, @1 N! @9 X( d
, J- E- b9 n4 P( K$ o
: u1 ?' u9 I- ]* ]3 ]wc.to_file('output1.png')
9 `% K0 E" B( y# u0 x" o1
8 G( D4 }2 y2 X$ f9 G词云图的过程中有点慢,大家不要心急
0 D: \* u; q6 A; B: [8 Z$ w, P, P9 A- W: Z$ j
, u" @* m. b, y: v0 ?% M这是最后的结果
! G" E# |' ^/ A" d+ |, k
8 q ]1 w9 O' J. \" _1 ~: x, X& I% P9 v- R7 Y1 z7 Q4 e* H
没有加停用词,所以一些无用的词比较多$ `8 k2 y# k# O1 M6 L4 u
1 F# A8 k! Y% [. n [8 Y4 p, }7 U) G& G
stopwords={'了', '啊'}' }: ^# c/ J2 ?) w2 s
14 \ F2 n; U/ |2 h7 C" M
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。) Q* ~2 s- L2 @+ _8 X! ]: e( R1 ?
我们再来看下0 i8 m/ z7 d7 Q# V
4 {& ]$ m' a. Y8 B5 ]! p
9 i& X2 j5 t- U. h! m
不知名网友:666666 牛批 老哥我要学!!!
; z7 {3 n) e) }$ M7 T& b! c
+ Q- O( Q; ^. A% J
+ S" `4 V7 J" I/ b5 @9 h3 l
5 h, B8 z" |- l' p! n R- s3 ^. |) B1 V9 _- G" `- @. R2 D
————————————————! ?" v" O) J- q& w( X+ l2 k
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ a: p$ q0 I }' n" J
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907$ T& r* |" Y& \ ^5 d
* y% C9 N( v4 k, x4 c* e
$ y" d6 @" c$ G2 [! V7 k
|
zan
|