- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 568694 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175831
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
: Y- r7 i. P9 d# U. L1 `9 w用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!7 L6 _0 r, O' m. j! y
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!2 H& l# f# {) d& O/ c, D: \" g
康康大家都怎么说!7 ?: r; |) j, e0 z/ S* u
- z4 v1 o: n, V# V6 g6 o% b$ N5 ]6 T
5 y2 \& y0 {4 v1 Q
9 `. A' i5 H- n) O G2 a; @
/ w. M* T& U' j3 W开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。9 L$ p' U8 C+ @
t" C1 W v. `* l7 O& y$ _7 s+ w7 {' G' U
如何安装模块:8 I# H, T' k" g7 P
% n( v! V9 g6 S( i* Q' M# ^
7 e9 f5 i u( x6 K. @/ p# q
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
. g- b0 \$ o2 s2 O. npycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
2 Q% F) p; r% Z! W/ A! d4 z+ @如果模块安装失败了,可能是这些问题:
) J9 g. F8 J2 `0 n) A6 X8 @
4 K, l2 Q8 J H7 ?2 D0 |0 I9 f- y% n9 J
提示:pip 不是内部命令
1 B& c7 D) c0 L* J0 G& x. B; M你python环境变量可能没有设置好
% o0 O9 K- G$ M% R. h有安装进度条显示,但是安装到一半出现报错了+ o- ^0 M, v$ |( }
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB7 G9 R! m. f U0 w8 L
read time out 网络连接超时 你可以切换为国内的镜像源/ I: h/ o9 m. j
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
$ z e, @2 a; b: G4 g- h3 E你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
3 s1 Q/ Y# N% {9 O& m可能安装了多个python版本( `1 P6 b9 S* F/ B5 Y' n, g
安装一个版本即可0 @7 E$ d1 l- k" Z2 |" N
Python做爬虫到底可以做些什么呢?* P" M3 ~$ m0 S' z' w9 ?
% h8 Z9 o6 I; q# O _& o
; q2 x4 M# N- n$ `/ q/ a) h常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
! A" \& e' q3 z$ Z4 O/ P( s% n12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量* a. d2 i3 H3 M: }
可以刷课 可以刷网课 自动 还能自动批量注册账号( f/ _0 I8 [# m! a6 @( c: J) F7 q
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
$ T& i$ P5 m9 K; g0 g M2 c9 L; C普通B站视频可以爬 番剧是需要会员的7 f- `3 |* M/ [2 B( e
# n$ X( X: X; D t) {& G( Y- O- } N
% J# i) v; H6 R! e8 _3 F2 i, h爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
& [) I% c% k) d# p' Z
, w, m( c% B; v+ \& p4 ^9 @- k, Y# W1 k9 H# s, [
1. 确定目标需求 (弹幕数据 那个视频弹幕)
, H; `7 d# n1 D# N# d$ D5 I4 [ 确定了3 R* X; X# ?, G+ J" b* u1 }8 D
2. 找数据 (数据的来源分析)' `' z& l) ]' P" B2 c, V
简简单单 找到了
# {3 [5 y% Q3 x6 l3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
( D5 K- f* l L 请求方式: get / post
; c2 o8 f, L: I5 R1 Z U& A 请求头:
( K, F3 ~0 x6 b1 f7 e! ^ https://api.bilibili.com/x/v1/dm/list.so?oid=3762001963 e( I$ H* M2 [% d% [% k
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)5 a2 e: O0 A$ C+ m+ d6 ^
4. 获取数据
8 _/ _4 R4 J; B( e# \2 j) r' r 文本数据 response.text 获取网页源代码4 u$ f7 ]- \2 ^7 S1 X; s- o' z
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
! s2 K0 Y! _9 b5 C/ x- m) {- ^ 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
/ U1 v0 Y1 M. [- d& j% B5. 解析数据7 n8 a [$ W3 O: T. m* |
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 - m/ b' Q$ |- Q3 F9 O& R
6. 保存数据. [0 M% P( s6 x4 M z
1
! H v6 a' E+ [6 X% o7 u) ?22 ?; d) p) I4 W4 s4 ]
3
" U4 {2 U) y% C R3 e; b4
( y" Z5 n6 k9 N2 V7 k+ t7 T5
5 V2 C7 b- w+ q" |$ o T6! R6 o3 L' U8 l
71 I8 _. i4 ^7 l5 Z7 c, p8 B
85 ?5 M3 x: B5 j: Q4 q' }0 O" W
9! J' m1 M' N4 y
10
9 l& [# g/ e, S& x2 ]" ~7 O. R11* T" q, r6 }& x; o# m! U
129 h- ^, s) m1 n7 }- u
13
( Y9 D% e% b/ V8 c5 q14
6 R4 l) d) [* j9 m d6 s5 M15
: Z7 @& j* n J) j161 Z0 I7 f- \" c* P
python除了做爬虫数据采集,还可以做什么?9 \0 l6 ` }! W6 J& Q* m
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)9 ?% [$ E4 q; u
- J0 m; R/ m [- m; b5 R5 N
) H1 J) C' `7 u0 d( |7 h% P! v网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
8 y0 \7 h) v: w4 K比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;0 ?8 R) V+ I, j
我可以做到这样么?
! @4 _* W4 y* c8 ^& h% b K1 s: s0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;4 m+ ]. D9 ^4 `
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;( V: d( r/ G! t- z
x- a8 b4 w. d3 I: q* j% K- ^* T4 z A
爬虫开发(脚本)(就业/外包) 可见即可爬
5 j: D7 Z4 @0 E h+ P; C虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
' x, z+ c# {- G/ ]8 r$ J7 [很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!, ]6 U2 i0 I: \0 D+ p0 j0 Q
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!" O! X0 s# g) {8 E$ G+ H, W
# B! A4 n+ L1 }! }2 v* S/ @
5 b1 Y8 ~+ i( D" k4 b) Z
数据分析(就业/外包)
2 ]& S; P' Q1 d6 @& R O5 A3 R3 x3 w
. _3 r& x' I3 |( y& x4 F+ ?自动化(脚本)2 \4 v2 v; h. V% o3 C" |6 x6 b
: h, U" a) L5 h. k0 d1 n
$ }* K& r- L. |( N* L( E
游戏开发/辅助(脚本)
8 c. ^* P0 C0 t V
4 T& M, l; E: i4 h; y! [9 e J
0 k+ k g& {5 X7 y( V人工智能(研究生以上学历 要求很高)
! k: W" d0 [; N1 c& y+ q: v
1 } r L. L$ @3 z
6 A- c; L5 v* b: m: h) k$ E. v* B/ p6 V& y等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
`3 W' F# ]" t1 w5 z$ V0 } U& ]1 t5 Y3 \2 U& p" j
; I4 D- y# m# }. g& a5 F
我们开始正题吧6 a ~9 |0 E, s ^3 [
' E, s& V, N* f7 u) _; m0 d9 y
0 e6 g, s: S5 m( w. U& A
爬虫部分:
/ u- B: R5 V! A4 c6 |1 W% T发送请求 第三方模块 需要pip install requests3 K8 E4 \* J; U7 S0 M( @8 J0 l
5 r6 Z! k1 W3 \1 V6 V$ g0 J" p7 k/ w6 A* ^ H; T! P0 V, Z8 o
import requests& o: ^2 \+ D# J
import re # 内置模块! B& x' z, r1 n; U
6 Y1 L! r3 q$ }) Z2 i) I$ x+ }
6 v# v2 k7 P+ k" J9 I
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'- g- q3 @$ @, M9 R) u, @9 |
13 _3 D6 O |" X9 g4 T
2
4 t( c8 W$ c6 i3 e" P* a, a3
S* d- L* g+ m& o0 N' J! f; w! _44 k4 i& X+ ]# P& y' {1 `
请求头的作用就是伪装
( P9 V! [4 B/ B% Z5 t3 _) p
$ T0 v: M$ K8 [7 h7 j' L, v3 B
/ D6 B/ n3 W# O" X. I* v; hheaders = {/ I& `, Z" U5 S( S8 V7 z) k I" ~
'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'3 j7 g, W& ~7 |' K9 \! \
}7 q( |! Q7 R* [( n5 W, Z
1
# n1 _0 S: E2 z2% N z! ]( I- i+ v: B* j9 I
37 J" D. l$ B" [: j [0 v1 }
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据5 z7 u y1 w; M/ }1 P6 T8 S
函数传参
( j' [+ f1 z& D/ U% k+ H8 Q% [' d5 y$ w, T. n; b- g! ~ f
/ X& x- S4 L! {, ]
response = requests.get(url=url, headers=headers)4 a- b, ?8 X$ [, s- z$ _
1
& T# F( D! Y# g# d0 k v+ B6 P<> 对象 对象意味着你可以调用里面的方法或者属性3 o# ^+ e' Z" q9 m6 ]3 C5 y7 f
200 状态码 请求成功! |+ N7 `5 i" q2 O+ g( E# q/ W
获取数据 文本数据' q- f. Z. `' M
自动识别编码
5 T% K# q9 q8 [; {3 }
# _7 Q6 S4 V0 A- k7 B
3 S' y/ x- O3 K- C. |/ uresponse.encoding = response.apparent_encoding4 m9 L/ \* S3 `, \6 G6 C
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)) R/ O( |2 @) r Y: c' s1 ^& ?
1) I' L7 [5 @; Z& P
2
# H8 }# A) Q0 o; D. Kcontent_str = ‘\n’.join(html_data)$ f& `% z- n3 `% \
% D! j _$ c$ Y: h" b
+ w- Q( ~" @) s& k5 R要列表转成字符串 ‘’.join()
- r1 Z2 t0 E/ s M' Rfor 遍历
, a& }( I1 F1 O3 c4 i: W& C" T保存数据 保存字符串: T/ r, R$ m7 H, {& o! _, |3 ^: M
for content in html_data:
- W1 p) O- K/ B9 d4 ]: } # mode 保存方式 w 写入会覆盖 a 追加写入
9 I4 ? O/ |3 R! s. ?& E with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
L- }2 p9 O1 z8 Z/ p% P% j; a f.write(content)
1 R$ `5 N0 l* H! N7 e& Z f.write('\n')6 Q; T3 i7 _+ @% H
9 M. Z& G, [% A. f- Y3 R( r y
7 T& q9 m. a- J( p0 m( I7 _- B) u/ Z
# print(content_str)
4 f: |' N( G* S1$ ^1 X/ f' K: J5 A1 _
2
5 N) ]6 ~& N. @34 Y1 S9 B- O& _
4) G7 a6 S0 O1 W0 C) X5 `# p' N) m
52 o& ~' ^- U+ Q
6
# t; a5 |/ \9 l' k" o75 w w) I6 H# d4 @. w! C
爬取结果7 Z& D% O2 t4 \* z8 m
: L+ U6 Z2 r# Z. y9 q# H
) K+ I2 v: @9 D) w8 ]- r+ h5 R- {4 h4 s8 O0 o3 M) c- p) J
% J" J- x; i9 O0 |3 Z( b; ^9 ?
然后我们再来实现制作词云图部分
/ L7 i# B ~ ^- E# q% v5 v9 {* _0 S
' h8 @! S' A) w& C) x
首先要安装这两个模块
" U1 l1 C. w5 a+ _* g; x
; P' `8 V9 J5 j. i# L" k4 G
4 d. ]: ]! r# P3 M6 T' Rimport jieba
$ ~3 k- M! G2 d5 z3 o6 v; Nimport wordcloud
. @7 \6 `+ Q7 e: m& p: x) Z1
- b# r. Y1 o8 g+ `( y9 ?" C28 m& e" x! y! C! v, h: @8 O
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。" p- z# S7 O8 A. K" K& v/ i( Q
4 z) ^' N8 M; Q3 V; q
3 Z/ _) X) ?# D/ E' l
f = open('弹幕.txt', mode='r', encoding='utf-8')2 e# ?( j' \% S: y* _
text = f.read()/ W$ s2 l% g: L8 h7 o4 D0 N
txt_list = jieba.lcut(text)
% i: O" Q3 @! ^: x+ o0 i# print(txt_list)3 I( q( w/ a- Q9 T' H# t- S
1
6 m% g+ x2 F* u) \* l. ]/ a; n& F2* }- J" U; g$ t
3* i+ Z" c% ~, D5 ?
4
: H% _% F! ]2 c: P" x0 t2 L3 ]列表整合成一个字符串* r( u* x7 L& K5 V# T8 N3 Q4 b
# R) \5 G7 `) r6 x- |
8 S8 {+ q: g( C5 o" Q1 Jstring = ' '.join(txt_list)
+ W. K4 }" o! m7 X! S5 Y0 A nprint(string)$ U, Y/ v. I6 x$ Y2 e
print('---'*50)& J# k+ r( R+ `3 J# ]
print(str(txt_list))$ K$ Y" \5 [# G9 p
1% w0 E) ~8 l7 K- u% }
2 w$ c- z! e: v6 h7 t0 h. P/ `4 W
3; Z/ b, o3 k! q5 w3 Y8 |
4
7 s) E ^; r$ t! L: Y词云图设置. j) y8 Y* T3 L: N- G$ i
/ v9 \) e1 M1 r; o
V1 x1 x2 D) p; m3 Xwc = wordcloud.WordCloud(7 R' U+ H1 D) Z5 [" C
width=1000, # 图片的宽
1 i P6 ]4 s# h, V height=700, # 图片的高
. l4 o b; A' I9 `: B background_color='white', # 图片背景颜色5 y9 }' ^% U4 G ?
font_path='msyh.ttc', # 词云字体8 J6 J0 z' c6 ?/ S ~) K0 L- U; c
# mask=py, # 所使用的词云图片! u4 ~6 V; r5 `* }7 a$ Z* h0 h
scale=15,
7 Z. F' D. ~3 o$ t1 u# g" \ # stopwords={words}, # 停用词
% K5 E; K$ m v1 D2 w; i( | # contour_width=5,
8 d8 f; G+ {2 R/ ^: _ # contour_color='red' # 轮廓颜色
3 C( s9 a; r0 j- u: o* t% X2 o)
) e* W2 ~ `5 H3 L3 g! j( u A1
: h# m4 A& n1 k/ ~! N j5 ]- O2
" H9 d3 x! f: Q& d$ Z3
`' R# N% E' q4 v4
6 V$ r+ N6 U' C% v ]5
$ C: c5 E# T( t5 I! A) q: G6; M4 ]! e4 B- I( F
7
: H' C K) w* z g8! I( N) x7 e3 s9 I/ G
9! q! F4 t& T. ?" V: v5 y
103 `. b- D9 S% Y1 N% m! l4 V' Z
11
: e- y, Z1 O3 ], p5 S给词云输入文字
" ^1 n7 w$ B; d, z& W" c; A8 F) o5 Y4 ~
. m+ O- V# J, j$ o6 m0 N
wc.generate(string)' C1 ^* Y Q" l" S t
1, K M$ j9 j7 j4 Q. d
词云图保存图片地址
. n9 {1 @2 ^. v8 g& a/ ~ [' l4 k; a7 }2 a p9 i
) R9 p0 t+ ~2 G1 ^2 ?0 ?
wc.to_file('output1.png')$ n$ V# x! c6 x- H8 G" Y, G
1
% J: n7 O6 \3 w5 |8 g2 J) [词云图的过程中有点慢,大家不要心急! f, ~, E1 w) f4 X
1 Z) ?( ]' @5 t6 h! N& T; g
# o" r% e! D& L, U; U! B
这是最后的结果
2 Q4 A& }2 D6 W4 Y$ R1 |( t4 A
W2 o2 `% R' s! `* _
! w Z8 t0 Y! J" P没有加停用词,所以一些无用的词比较多$ F! Y; W; Q* |& K2 Z2 k/ t
! X" U H1 M5 A" b& H q' z' n& E, |( ]7 c
/ i+ g5 R$ [- Z, estopwords={'了', '啊'}
* s7 A2 h* [& l& T6 h1# J: S* u! |" d. r; s
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
' ]3 |' s8 |. }% U3 w% N我们再来看下# ]. H5 _; d6 |& A; O; y
+ U. W: c, V2 I c6 d2 y) P
. l, C; z- ~$ c( _7 D. B& n
不知名网友:666666 牛批 老哥我要学!!!8 m: U6 w' `/ l, h8 p
2 H3 \+ ~7 M, ~" ~# \% A
0 E( p+ ~' j# x! o$ }
% m8 P# u# a) l w& A2 u* h7 V* S
' ^! H+ j$ i) L: v8 o, V————————————————
5 Y8 {3 b1 |3 ~9 q0 _7 ~+ e版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( x" ?" E' {4 e
原文链接:https://blog.csdn.net/ooowwq/article/details/1192119071 F- t) C b; o$ v9 D, \
0 x+ n& Q3 |) P: q- j/ o
5 x. s9 C! t$ t; U' m1 r7 L |
zan
|