- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564704 点
- 威望
- 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年大象老师国赛优 |
! E7 K6 R/ f: `! U7 s用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
& Y. u, E1 H) Y9 K3 B4 ]今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
% ^- T( F P" g7 j4 A康康大家都怎么说!1 Z; D4 ?7 Z2 m; n
c- D4 R. ^9 k; Y. J
X$ Q. u$ x4 c6 r F& E9 S! T, _+ G$ h" p8 g7 Q
9 Z- y2 @% a% n j' E+ D开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
/ ?( Z v9 w. @3 z' M1 h! f
& J; m( ]- `' v* A$ ^+ q) v3 T4 T, u: x) n6 _' [ }
如何安装模块:# G+ [2 e7 U/ w" s
3 P7 A3 H* w. \$ K
- d& e( M, m1 H- uwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车! d$ r4 X3 p( ]( {* @! U
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
0 H) {! [/ P( P( _如果模块安装失败了,可能是这些问题:8 f: N0 }4 A' _% v2 L
; S" o S6 w$ f- t
M2 h) Y8 y c& \提示:pip 不是内部命令6 y! j+ ~8 U+ q0 s$ d5 U
你python环境变量可能没有设置好, v1 d. E& @7 g0 \- M: c- i7 m4 B& i
有安装进度条显示,但是安装到一半出现报错了! U- y) H: y0 s: Z
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB) d& [+ z9 P) J
read time out 网络连接超时 你可以切换为国内的镜像源+ c! V) f/ k# f: C
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
' [3 A8 _* r( y1 q你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下2 @( ?- @/ H1 k6 Q/ `' V& ?8 H+ i
可能安装了多个python版本
5 b, g3 l9 x8 M& `7 A0 g |安装一个版本即可
9 a6 f l0 g- Y$ o- cPython做爬虫到底可以做些什么呢?
7 [$ i1 ~$ [, H! G2 e4 J( n! Q& {) P$ h; x
7 B$ ?& U$ n& ~6 f* F; N
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…/ F0 {4 Y, d" z" }
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
: v8 z+ R& C- P1 b- \# ^可以刷课 可以刷网课 自动 还能自动批量注册账号, E! y# G: F8 R8 l$ r: ^
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
7 i& N: o% b8 a9 C+ E" i C普通B站视频可以爬 番剧是需要会员的
: r8 a; W0 R; f, E( ~$ z2 p9 [9 D$ K7 f! p2 D6 d8 ~2 v1 C
! E/ Y7 Z5 A1 n
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)+ q/ x9 O6 i7 g) C4 b
2 t j; H* H+ h2 D$ u2 e1 C+ d7 B7 r
1. 确定目标需求 (弹幕数据 那个视频弹幕)' ^0 q! s; U2 r1 p" Q
确定了5 p( F, a: Q* e9 f& S2 ?; ?( n
2. 找数据 (数据的来源分析); a: P: E$ [& l* u
简简单单 找到了
! ?: C/ b7 C7 {2 _- m: C) W3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头). ^7 g% D4 h- [0 T; t% o L
请求方式: get / post; C5 l" d0 [, ]# V$ U3 K
请求头:
- \2 D/ T& o* G' G2 p https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
) ^7 W: e! Y3 J1 w( w2 ~" \$ n (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
* Q/ _7 H, ]' S7 L6 J. T$ s8 I: C4. 获取数据 - M, M& e6 i* M3 \
文本数据 response.text 获取网页源代码
, }2 O4 E% _# ^. Y# P( ^& v json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多1 E! e, F8 l4 q P
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
8 p9 p$ K0 x: }3 J' n3 G% Z, k5. 解析数据
( }" d8 z) I1 g8 Z 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
1 ~5 A u* E+ e. x7 u4 L' g6. 保存数据
3 g$ z/ I- ]) }1
" Y* C- s" q* B9 s28 }5 U* j- \. S# }" P8 t* V
3
7 v. ?' q& B/ |' {6 X4
8 h5 W( I, P( a) C+ o! K3 o4 o5
$ k/ D% a4 K9 G& j4 F6; A- P, ]3 c# z5 p
72 h5 w5 n( h4 Y6 y1 p0 a H
8) v6 P. l1 k# M9 q
92 H9 D) x7 y2 L( o$ i
109 R' y; W* O. t0 m2 f. i
11
# W( E! b5 u- w' A9 s1 u) A12
: G9 q' X5 t7 }) D/ o3 }13
! F! W( A4 r9 X1 e' o/ T14
/ q4 L& r; z7 s15! d' H5 \0 i9 [* g) B( w8 I
16+ x: v: X3 l6 B2 E) v* _+ F F" F
python除了做爬虫数据采集,还可以做什么?+ |& h `, q; U' q1 `+ F
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)5 ]! X; S3 g2 v2 R. R+ c& h
1 P1 ^6 Z& f- @8 m; N' Q0 x, y) y# o+ F, }
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K: q) `0 ^9 T" y; y5 |, m" y
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;1 Z5 o3 w6 F% j e( O% z
我可以做到这样么?
% B0 i" E+ a7 r" N; W( F$ r0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;+ I& P+ p4 m( U" L0 [( a7 M& I8 r
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;+ e2 j" u! x. n' K1 p" |8 a
& p, q- l) a5 e3 e: V3 l0 \; `
5 `6 B; t/ ^' x
爬虫开发(脚本)(就业/外包) 可见即可爬8 y7 x& W6 o3 }% E! s/ f% q* i
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!" t0 Q; i0 f: ^9 @% B
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
; S/ W; L7 O2 [4 b Z w( g# S之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!+ r. v) O% M) o* }& H: x* x3 S5 e, B
$ _# {" T% k! l5 ?% `* ]$ Z' ~2 Z. R
) n2 \' d- K% N% q0 m: H8 H: u5 O数据分析(就业/外包)" u- ]1 Y/ y2 ]3 }+ k
% E3 k3 T9 x$ q$ N; v
* P8 i6 @+ S' r( t+ i& S自动化(脚本)- E2 q; H3 e$ y, F8 k7 }2 F
" Z5 T% N8 H0 X% c" M* q2 ?
0 Q, t. O* J( V U, A游戏开发/辅助(脚本)
) H. K+ H' B' ^% r- M9 @$ l2 F+ V6 I. [
( B* b h% n1 g7 y
人工智能(研究生以上学历 要求很高)1 D4 u5 J6 r# j! y( `1 _* h7 b
9 P5 c4 o% C; O$ ?& v) d$ a6 Z5 g9 T6 e; d
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
, k, D" R4 S8 |( N
" u" Z9 k/ ]+ \1 P4 E: |& M4 o) L( z9 G* J4 Y* v" x- r; F
我们开始正题吧, @7 x! ]6 {/ Z8 O/ K8 T
6 l+ t# O, t5 ^4 u: i1 Z9 V9 e
! c- C7 B: T+ d' c# o3 @
爬虫部分:
9 [. d+ Y8 m# w1 d. q/ p发送请求 第三方模块 需要pip install requests2 n+ u4 Q5 {: s/ W! F% ]( C
6 x$ W- c3 j+ J8 s0 m1 v a6 B
5 W7 U5 \6 |# S8 _% G( ~ E5 D8 oimport requests
. {3 K) S K: x& z/ Bimport re # 内置模块! n! x D, I; N0 o& n3 y
4 w% D: O S5 v3 p: t$ N+ {( p* B: c K3 E& T
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196') W" I8 ?; U6 @$ U8 i- o1 {
1
5 f. H# N; h2 ?9 C$ Y$ o2; E+ R! ?8 Q5 O0 H p- s
3 l0 D) F9 o9 c5 Z5 l4 r9 ^! G7 F& `
49 r- ?# V* Y2 W, A; y
请求头的作用就是伪装- |" I. g0 b, w* B) Y
' R/ O% s; | K& F |5 m0 s* T# A2 g
: E6 G& K' Q1 fheaders = {
+ m" }+ }: t1 Z1 U7 n( S' 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'- p; e, w! B+ _8 P& [* N# u
}- j2 {9 Y6 j) O, O; {) V: O
1
7 y5 p0 b; t4 @0 t2& v" H# v7 N' }& W! }4 P
36 e; v6 X! h- f: B# k
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
1 D+ F+ Y, m& i5 i函数传参
' v9 q: t4 Y: v2 F
$ r! A$ L& y# S( i. B8 y& z6 G2 Q9 t8 I
response = requests.get(url=url, headers=headers)
# q. S& O) V4 D3 k5 j5 A1, ` B+ ?( v8 ]
<> 对象 对象意味着你可以调用里面的方法或者属性
) s7 O5 D( Y7 H2 j+ l200 状态码 请求成功$ x# }" H4 M' y" D8 E1 M
获取数据 文本数据6 R4 O& Y" {/ A0 }
自动识别编码
! M" B, p3 K9 t8 T( }% N) V4 { ]( f) F S7 U5 W' J3 f/ j
! J8 B$ |- h2 W6 j" D
response.encoding = response.apparent_encoding
% I$ o" w: k% Q! y! t& Ihtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
7 X) f5 ?4 ^. I1
0 g8 I- ]$ t! n" b3 @2
( w6 L# j9 P5 u5 v& K3 _0 fcontent_str = ‘\n’.join(html_data)
1 `. _5 T' n& r: B' U( v2 f6 D
6 w X& H: b( U" D# q; D( D
6 f& M1 u2 L1 p4 f要列表转成字符串 ‘’.join()
9 e+ y. p5 B+ }& }# w$ bfor 遍历
* s+ X0 y% v7 o# a保存数据 保存字符串
! U0 v) y, q* C" Hfor content in html_data:
1 J8 q! l, G0 t9 N # mode 保存方式 w 写入会覆盖 a 追加写入
" u. a& l4 m P# T; \: m4 l8 V with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
) Y/ C6 x; k& }* H1 q! ?6 A f.write(content)
! D; v; G7 e0 e/ \9 ?% A+ ~% W f.write('\n')$ t# D5 k* f7 u9 ^( f! x
# _) b6 \" h1 m
1 h8 i3 S, P. O# Y5 {& I# print(content_str)
; X+ Z3 t0 V4 _2 Y1! }. T7 C G* d& L8 L
2) ~2 m. X+ C: q& Q- x( d
36 x- ]8 |( R( H. x) W% p
4
1 n/ i, j" @9 Y3 {( T, T55 n' m+ r9 k9 n6 K3 J& x# t
6' h0 V: n1 y K9 |( ~
7
* r. V! M" o4 @# s! A; c) d/ P爬取结果
9 b3 |5 ^7 k# z8 V; h
3 ?- V S, ^+ }' T6 T, e- L2 d0 ?
/ `" C9 S) d* j
' S4 R3 U$ W- e/ C7 J6 u
然后我们再来实现制作词云图部分# q* M" ]& @! q
3 N% X7 h$ [" K: x: `/ n6 h& S" t
& x# ?7 g! R' g" F
首先要安装这两个模块' P5 S J0 U# U1 ^& K
6 L. J' w, B2 H4 e+ [
/ ?) d# c% d/ n% I/ d) y9 l7 oimport jieba
5 f7 Z1 l6 A \4 U4 @( q& m1 `import wordcloud4 E* @6 W* W5 I9 J& O) v
1 j N r5 ?1 `- N6 `7 e+ Q/ J. V! ?
2* r2 X- R( {% N+ o3 {
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。" C. L% ?: y/ m2 x
' i7 ]! d5 L( Z" ]6 @, J. |- R: _0 B$ [+ z
f = open('弹幕.txt', mode='r', encoding='utf-8')3 N5 s7 Y, Z# S' U' R
text = f.read(), x `2 Z; A2 i2 @( l0 f
txt_list = jieba.lcut(text)
5 s; P6 Y, ~" ~7 d; T9 P9 Y& I8 F4 m# print(txt_list)
0 y5 |- J; O3 I1 O3 w/ s1# X4 h. _4 d& I9 N* v( X' }5 Q9 [
2
' ?# h8 i* G) o* K' ~2 }# s6 E' D3" e e( n Q# B, ^- e
4
' f7 P4 Z0 D1 h# I& [1 e列表整合成一个字符串
9 z6 @5 n; j: Z8 Y+ H/ u3 o0 {
; l8 r: i: t1 |! D" M1 i, P P- w: k$ _
string = ' '.join(txt_list)
0 o/ D- t1 s/ d# }, D: A! s7 C; Pprint(string)
2 `9 b: S# y. W6 jprint('---'*50)) p5 D* ~/ L- ?" h; G6 N0 Q
print(str(txt_list))$ |2 G5 x) P7 }1 X, c2 K0 o, M
1
- ?, D! E0 T# W3 g2
' b l/ [3 J m8 R, p. z4 E5 R3
: w' c6 w# z7 s$ i/ E4
& A$ e4 F( L% v5 P- ?# d词云图设置/ ~1 u. F+ W/ C" h" n
% O( m5 |; t2 e$ q# q @% G9 ^
9 n8 N: W0 `$ f; C, _9 K1 l7 swc = wordcloud.WordCloud(
9 C; {2 O( ^( C& @) O: _1 l width=1000, # 图片的宽1 B/ q0 Y, z! e/ R8 h) _
height=700, # 图片的高6 Z+ {: p* ?2 Y$ ~" e! Y3 {) _
background_color='white', # 图片背景颜色( }/ j. I, B8 `- f8 J2 R
font_path='msyh.ttc', # 词云字体
' f2 K+ v* g& G# \# e% I # mask=py, # 所使用的词云图片
* c8 K) n! j. ]/ b% u1 r scale=15,
8 J6 B$ n1 F7 g9 i% D- N6 { # stopwords={words}, # 停用词
; h& M" A6 v! Z0 ^ # contour_width=5,
4 P) u' q% e0 M; }4 z! k # contour_color='red' # 轮廓颜色6 P& t3 z. g* T
)
/ ^! q% T5 m" \" e. P5 \) u1' X5 D! Q$ B2 V8 Z& ^
2
# l/ T" L) D) d( ^. C% m5 l3
: s3 R: b8 U5 W" m* s. |: `46 J$ D# y4 h$ j. k& V, q
5: c/ f: l- K' L4 {* Z: D4 s; _9 H
6. O ^3 J" _& i% w
7
. I& E! d! ?( b1 a& h8
3 p( h9 a6 D4 A q7 s9
1 X7 z2 u& P7 c4 V. G1 ^4 M: ]* M10
: A: |" ~9 o a# _1 S2 K7 \3 L8 i L11
; v) I' @3 H4 a- N给词云输入文字
+ \9 |, v' {8 w) a2 N! u8 X% o
' w; U' f0 |: l1 N; I* R
3 T3 |8 Q+ n# u" H8 Ewc.generate(string)+ N5 w! r( {6 n, i3 u. `
1- e+ G, @" j* H P1 L% d& X
词云图保存图片地址
4 W6 r% f' k. s6 l% E4 I" v
+ a& o) n- f. U4 G+ o6 P; s+ I0 M
$ Z3 ] B( Z5 X5 }: gwc.to_file('output1.png')
! X' p. E6 c7 ~7 P" X. K5 A1/ W6 ^/ G5 D; F7 H. N
词云图的过程中有点慢,大家不要心急$ g: W7 ?+ P$ Y$ T* X# Z( H
7 @. q& @, o+ e0 {3 N
3 S+ e% K: w" A. D; R/ m1 R: Q! ` g5 J
这是最后的结果
6 {; U! ?) G: p# l( R) s
; ~5 V+ b: Q8 B7 ^( ~, G2 H8 F5 ^$ O( w5 ^2 \
没有加停用词,所以一些无用的词比较多! C' F8 I8 m4 y5 A& @
- U l4 ~4 C' r" R' G* G% J" G7 t2 n) U2 H) y. x
stopwords={'了', '啊'}, b! z1 D( _5 e5 B
1
9 W$ N: S& }1 k5 a- H' ]把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
5 v% w0 o+ O' T; w$ X0 j* T+ Q我们再来看下
/ f: E# e2 |( {, ^9 ] j3 y0 K* u
3 m! g q' \7 }* K
, |' v0 |& V* t2 R2 i不知名网友:666666 牛批 老哥我要学!!!3 _9 Q, M' \. M+ y
# s: t/ u- o$ g
) K! D; ~) `2 k' `1 n, F) N& u* C( w' [# J9 P% E
. N7 i! k3 c5 Q @9 h, o( ?2 Y————————————————
# l+ w, F) Z0 y3 d* V% Y; [版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) C' Y& s+ `" E7 q
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907, O& G" ?* ~3 o4 P) j4 j H
2 ^9 h* x# f# t8 g$ [1 h- X
& a! A V( W: S% |0 Q; J7 _6 h |
zan
|