- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 555834 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172123
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
7 S. y$ W! y; |0 l用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
! L1 C. o+ D% Y% Q* Q& e% O" J今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
3 J) l# X0 n" r# R6 L康康大家都怎么说!0 B2 `. `; M3 l; e* x
8 n1 Y! x7 ~+ n" W4 k
6 e1 O( _" C, [7 B$ W
Z5 \) h; F8 Q% \6 {) O I, h5 ?% Y6 u7 i4 M+ ^0 b7 N
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
Y; N- Z0 I1 J, O& y
# |8 C4 {# b$ f0 y0 V* o* h; k1 t/ Z
如何安装模块:7 v0 B, t: V6 V) r7 h# ?6 {
# B: L; n/ r8 ]* ]
+ \) Q: v* w: l* J
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
: Y. Z1 Z. D6 s% e$ ?pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车+ I' |2 t& S# s7 x
如果模块安装失败了,可能是这些问题:
: d2 f2 q9 L7 N6 s/ K. d3 @9 u7 p" _! ?2 W. w
' l2 y9 F8 k$ y1 l/ E2 I
提示:pip 不是内部命令$ ^0 F" P, {. _# B$ J u
你python环境变量可能没有设置好
5 o$ r& {2 K' N5 g4 p% |) S8 Z有安装进度条显示,但是安装到一半出现报错了
8 i2 `4 M# z2 `3 A' [- w因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
$ U" C2 d& h4 j; S. O) C1 L4 J/ }read time out 网络连接超时 你可以切换为国内的镜像源% t! g! W! K" e8 j! T: @, K
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
9 t7 g: v* g; b' z* H你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下" W1 [7 q% `0 D: b
可能安装了多个python版本* @1 w& g, K) P) I4 v
安装一个版本即可. t' X4 |* `1 H! I9 y+ [ L( v
Python做爬虫到底可以做些什么呢?0 v% m `) g0 [6 O9 Q! l
. @$ H( y+ \; D* [
! p" W+ g F8 s' W" x常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
: b! R% w: O7 g4 H5 @; L12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
0 b$ r. u+ G$ D1 w" p1 O/ A可以刷课 可以刷网课 自动 还能自动批量注册账号3 S$ V7 e3 n9 B3 a
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
: j+ n( D4 W. u* {5 d普通B站视频可以爬 番剧是需要会员的
" ?8 t+ A9 u- K5 n, D4 S9 H7 ~, \. k0 v0 b
, g& t) E* b1 Z' {3 c. |& Z* a爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)' J* k+ o& W6 G: u: ]( G
# H, {" D; F! J. o/ z! c( K2 g
( Z) e, u: D* P5 a$ Z1. 确定目标需求 (弹幕数据 那个视频弹幕)6 n% z* y4 [7 ]8 k1 ]6 p
确定了9 q% z0 \! Q/ O5 E( I
2. 找数据 (数据的来源分析)! t7 ^; Q, ^, A5 o1 t
简简单单 找到了" T+ X8 @, E" T u
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)9 F y4 {( O6 m; x+ N+ S
请求方式: get / post% e) R7 P6 R, i( Q3 K
请求头:
* A4 H1 m% y: ]. G8 e0 K+ ] https://api.bilibili.com/x/v1/dm/list.so?oid=376200196 L+ n0 A6 I) v. c' X
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
5 J) k V( R4 I6 H5 |" V4. 获取数据
& s: K/ m) S/ t' r9 e- G 文本数据 response.text 获取网页源代码; [, f( ?: h- E/ A
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
0 i% V8 S' W6 z( H! ?% Z 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 ! J# G) W/ ~8 _
5. 解析数据
8 |! W N; m* \8 G# r# g 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
7 f) l8 Q7 ~9 v0 D2 R$ N) w6. 保存数据 C/ |' K/ G- o* J
11 o8 \( `8 I! w0 ?# `/ p
2" ?9 V" P& S" c/ w- M2 ~ A: j. E# {
3/ j* [2 n ^5 X/ c
4
0 K8 l. m+ x( S- {' z; L5$ y: M4 B" G# W
67 b2 ~+ k( J& b* Y9 Q
72 b# p [4 p, m% o' s
8% K j1 K: O1 Y
9
/ H$ [2 E6 I; r, C& o1 A& @" F. i( \3 F10
; ?& `5 ~' b U, w116 b g0 s- T0 Q8 a
12
* C4 Q! R$ f- L. H# _) m. s% d13
H9 H8 Q- A1 i2 v7 v5 a14
2 b4 i9 b" b7 Q# Q$ [15
' H, h; p ?; I/ y8 v; }16
1 i8 m# f# K3 t, H q: f- ~/ g+ ^python除了做爬虫数据采集,还可以做什么?
7 o9 S) P/ q* U兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
2 n4 Y7 h @) m
4 C* ]% H) ^0 P. v+ F2 u* N! b; H) J) B
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K6 r; c" }- Z9 Z3 j% I4 |- s; n
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
- V2 ]9 W" B+ A我可以做到这样么?" Q4 E& d A' h, P' g4 o
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
* C4 S* l' [2 z如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
j8 z' g) o# U! ?2 U1 P- n% |9 H4 q# D* u7 S9 Z2 ?
2 M: T& l& D; \4 ^8 Y+ T0 q. h, X! a9 V
爬虫开发(脚本)(就业/外包) 可见即可爬
) b. g, W9 `$ R# _6 W8 W2 m虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
+ h& g9 l7 `# c; d+ j: Q很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!7 f8 b# U' R n) d$ D
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
1 R$ e2 s0 S4 j( ?" d- {( m8 x, s$ F: A
; D T. b9 @/ ], [* o# i% H
数据分析(就业/外包)
: D! K4 I7 d6 ] c- y* k$ K: j1 t# w" q4 P
5 r% N" F6 ?1 m2 P; s自动化(脚本)$ [& d) i; a9 q; b9 r
! x7 Q# `; S+ o( x
8 g" [2 |: g; z4 A6 Y游戏开发/辅助(脚本)- m* E( \$ i8 ?& Z' V
# ?* E% r2 n4 Q. S' M2 T4 ?/ k) F! Z# Q, a0 w9 s8 ~
人工智能(研究生以上学历 要求很高). d) {0 X- y; l2 _8 F; n2 F
2 b3 s0 s8 r* F. w5 V- V3 p" J1 q# p
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。3 Z5 b, L H! a- R
, U7 e9 p: A5 D9 i2 o1 z
* h" c0 L2 Y* W2 C
我们开始正题吧
. C$ D, y# ^0 c! X- r0 L, v/ _* f4 s, A4 Y+ _. h
% f$ U% b( p' y2 z% M爬虫部分:4 n& i& U; Y/ ?* q) {( ^5 D
发送请求 第三方模块 需要pip install requests# d6 t" q$ [" C
; j- {6 C& c& W3 J
, F4 C* Q6 B0 H* o; W
import requests2 V, k7 }) I O% {& C$ I
import re # 内置模块
: {" y2 b0 I0 G; ]
5 b6 [% ], \' q2 _4 P3 t8 k- Y; \' }% s
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& t% X9 d1 p) k
1. `' ?. S! V8 N8 j9 ]3 z% V( k
25 n+ {4 J! ~! M6 E, C0 T' z
3" I: ^/ S- L5 B
4) b8 x5 b8 ]7 [6 p6 b2 `' I* w
请求头的作用就是伪装5 p8 A) B$ Q6 C- {! A* c, x
s f: v4 g' a b
5 C0 p* ^* r4 V( i) Z5 Aheaders = {
$ D; D4 q: |; L9 g2 p '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 s8 h+ o- T0 |+ ]8 @
}
8 t- R( S# c+ M# z1
7 _0 [3 u% M' |# b* M& g2
; Y2 _# e: y+ T$ T. `& x3- N: X% X( D$ z, K
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据/ T+ ]# g0 J5 V9 F* V
函数传参) V" ?' ]# C" [
3 e! Y8 D. R5 E. k% _+ v* h
, I/ H2 P" p; R0 h
response = requests.get(url=url, headers=headers)
3 R, a7 h& Y1 y, Y3 `% J8 s$ i# k1
% h. l: p$ W. `<> 对象 对象意味着你可以调用里面的方法或者属性
: z# M/ @$ J4 @* G200 状态码 请求成功
3 X9 N1 D" O0 y6 S' X获取数据 文本数据
. j$ u: k6 F" D7 K$ V+ Y6 P0 b# G/ b% p自动识别编码' S0 z! m0 b) h, u5 }$ F
8 V. r h+ A1 _% j- i6 E" t/ @ X& g1 k- K' U( L! F ^# `5 I N
response.encoding = response.apparent_encoding( Q O/ g% b0 _9 g; h6 N
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)* S5 U9 L2 w5 U0 n- W
19 l- |! @1 _1 M% A* E2 S+ m6 u/ p" y6 l
2
7 z# O/ a: `6 }3 x u$ W# j! ]+ Jcontent_str = ‘\n’.join(html_data)( Y# X; A/ |! K& K+ V4 R2 ~
/ x( ?0 a2 }7 C; g2 e% {: ^, i1 k& n6 H3 x. n
要列表转成字符串 ‘’.join()! w; ~- |9 o( `1 V9 k6 m
for 遍历, P8 z# d: \" q \, {
保存数据 保存字符串* x8 G% T+ W, @" L, E
for content in html_data:
" b- R6 M2 i+ w- q% K) v' P # mode 保存方式 w 写入会覆盖 a 追加写入
* I7 t( r. C( e2 w/ Y$ z with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
$ w; r; r, o/ d( f, }. w+ v f.write(content)
, _0 K' w; k1 v, ]! K f.write('\n')
& J7 o0 |3 x. n K: S8 E) b k5 H1 D. ?; u& |
- L4 U2 w, m5 t4 p4 j
# print(content_str)1 M$ o J- }6 C
18 T9 J% u" ~* w
2
, t+ k: c6 ~. f) r& p% F4 L- l3
* l+ Q6 ~9 b+ `# y& E1 v; g4
: ^. p b- r8 [. G0 }5. c5 h1 g3 P3 V, q) {! _
6 P: o* ?! r- F: q Z
7 K$ Q1 a9 c8 _7 A: k0 L, Y
爬取结果2 E1 `0 }9 r: v4 L# ?5 `
: p8 u8 S. E4 {# `/ K: n8 |
( O- V" Y# y6 x" @( g$ r3 c% Z, m4 |! d; m8 U
6 m& L: \/ n0 u) x% t
然后我们再来实现制作词云图部分
$ e0 r3 e5 ~, h
( c6 w7 K* `9 a
4 v; y/ t9 W" [: ]. @% h首先要安装这两个模块, {+ i6 s/ Q. |( q
8 l: z* E8 h5 v' F( _6 r) U M; P& l4 P
import jieba
% X# U. c P: O, e2 mimport wordcloud
0 I$ Q* ~" B" m* n, {1. ]! w4 S$ l0 L% \, u Y4 ]* j8 j
2
, P4 ^- D# A3 e0 e' O% r& X一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
% e3 S' P l, J8 Z6 d7 w I6 k; R# u3 ?/ j
' D# v0 I2 Z8 Q- J+ Z, C' p0 O8 Gf = open('弹幕.txt', mode='r', encoding='utf-8')
2 a' y1 e" s$ ~+ P G) Ttext = f.read()
9 ]7 @* _* v7 C) G3 w) b# Mtxt_list = jieba.lcut(text)) G/ F* E( P- a% t. X
# print(txt_list)
# s. C3 ~ n2 j' z1
% W7 s8 z( A7 |7 j2
2 t! s4 j+ K" T, _! a3' `; e( A& ~% w
4
8 P" x, X; v- Z5 |$ `, h/ g列表整合成一个字符串
; t0 q$ g1 [: A. E4 I7 c6 q. O# s0 b0 y& h- u4 `( |
" F! O2 V1 Y+ P* ~& |1 q' X# L% Q9 Astring = ' '.join(txt_list)6 B& s# c; y$ ?7 d/ x% e
print(string)
1 x+ G7 \9 x, d4 kprint('---'*50)- n7 [0 s3 I6 T3 r/ k
print(str(txt_list))
; g8 `; O3 |' T1
4 s+ `7 ]* B. x: ]" U" u0 ]2' }3 G8 `: W/ F! y8 b2 k! Q4 o8 {
3" o2 B& }9 S- v: x6 Q8 }9 l$ r
4
, G2 Y2 h4 C; r. o词云图设置/ G- ? b/ G% i1 s2 j/ ~" Z
9 K* d& a+ s; ^4 _
& b4 m, v5 ~* @9 \9 ~) b% o
wc = wordcloud.WordCloud(: V2 M& g P$ x# p9 y
width=1000, # 图片的宽 f+ _; f6 u. M* T! r; z& Z& {
height=700, # 图片的高
" b r" z$ P8 @& i& v- l. j/ X background_color='white', # 图片背景颜色* q+ _* M; r# N0 ^
font_path='msyh.ttc', # 词云字体$ T/ ~" d+ y) }0 h3 S6 [
# mask=py, # 所使用的词云图片
* P9 x$ c8 B8 m! q% ~ scale=15,! W6 ^0 {* K- w, ~+ ?3 U4 }
# stopwords={words}, # 停用词# X+ W8 M' n5 D9 T: l
# contour_width=5,' m0 k) F/ [: }8 T7 G
# contour_color='red' # 轮廓颜色9 p, }& Y m- { \
)6 s$ O+ u( v! d2 n( b
1
. o3 U) E: I( ? j! c2, b& g$ K! ?- c: C7 W% L, v' n
3% t# V* V1 Z0 X7 k u
4( A* f7 h3 p4 a. `, u7 @. F6 M
59 @$ f% d+ O* C/ M
6( y9 M5 Q1 f/ o
7
( I, u8 J8 E( S2 g7 l/ h% Z7 p# m8
9 z& G( D: F9 k' O9
4 _6 R% e: z& ?0 J- z104 a K5 w, A1 Z* \# m
11
" o# \' A: h$ I6 e: A& A给词云输入文字
2 V& L H1 }9 f# O5 x; f. c% D0 O0 \' i' c; ]6 A& B5 E y3 ^9 L
, \$ y" Q, v0 z2 A
wc.generate(string)
' J' m8 ?8 N5 {% P7 w1, {, ^6 M# m5 O L" `: n+ }
词云图保存图片地址
3 r& S* k5 i9 Y3 S3 q1 D8 q# a) J+ m; S+ m9 b9 d% ]1 g
: F' A2 b$ w( h7 n0 l: ?wc.to_file('output1.png')
( L6 i- C! x6 d) i8 Y4 X17 q3 H( F" c7 k7 ^! q1 P) |
词云图的过程中有点慢,大家不要心急
3 ]! J/ ]" l4 A6 }
$ {9 m+ Q& o1 @% q- h6 l, @6 ^6 {1 ]5 f2 Q# l
这是最后的结果* I A, y2 L" P) k r) t0 H
# i- S0 M- g. q+ E5 r0 S
o# S) h' w4 a8 x/ X8 m' H没有加停用词,所以一些无用的词比较多# e& f0 _: y+ Q }' m+ x
2 |7 h. o+ e2 c0 E. H. r
" @6 x+ L. W! Y# u' u* T" d. ^) X3 }0 Cstopwords={'了', '啊'}. t) |& V/ w+ }; {! K6 {) ?
1
1 b9 F9 P6 |5 N7 O. l) J把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
; y7 j8 ^% s8 B" R我们再来看下
8 u% y; }: ~! i$ e% w1 S- A" j% ^& Y, L* v6 ]3 }' k
* A0 k2 j) g9 A5 `不知名网友:666666 牛批 老哥我要学!!!
+ h p# |& |, F& j! O! e9 r& u' |1 X8 R' z4 X' ~$ M
I4 C4 [; j+ s7 x# Q6 g' V! }
6 x7 a% [/ z. I, B0 K: f6 s
S) D# W* y, _# q) y! i————————————————3 T; @ ?# z1 ?5 z4 P4 e# H
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
$ [" V1 k; h8 E: t8 F6 }原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
, R8 ~5 W. e6 G4 K0 d+ q& L+ r* p: s4 c! A& R3 H( b
8 r0 r5 v$ w: O/ P( J0 Z p. q* b |
zan
|