在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564697 点 威望 12 点 阅读权限 255 积分 174632 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
- a! Z4 C' l" G: p# W6 e
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么! ; O! {% Y0 z7 M
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图! . K2 n( y8 d' @% D& L3 J% b3 N$ t% f
康康大家都怎么说! 9 r J0 k1 M9 j4 {$ _2 f
% b% x2 i" A9 ~
- n% `$ U1 m' e( X2 c
$ _; e# k6 K1 } - ~5 U9 N# @4 W$ ~
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。 a. K0 a+ u4 n" R' F2 ^
7 A7 V$ _3 x# F* B; d( B ^& M; A$ s' R3 H# D& B0 V
如何安装模块: D0 m* t! A- q0 P* K P1 L2 w7 R
9 h$ L0 Y" s) W
2 `* x( ^! Y" ^5 p5 x
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
( {4 v* t# y- ^3 U pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
8 q8 k o* u! P2 {5 V M 如果模块安装失败了,可能是这些问题:
9 V: ?2 ?! Q3 f( W% ^$ E
& {' X, a# M7 C, d7 G , i/ ~) J/ z# F8 i2 p6 V
提示:pip 不是内部命令
; g$ o) t4 }: K9 N* s; C. c 你python环境变量可能没有设置好 : c$ `6 V1 ~( |, Z# N8 y
有安装进度条显示,但是安装到一半出现报错了
; y* o& _1 q: V n. K4 U: K4 r3 r 因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB , i. O& w5 U2 f* H1 B
read time out 网络连接超时 你可以切换为国内的镜像源 # S4 A3 V. E# G& I+ t2 T
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块 7 w5 b) b/ H0 B' O
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下 ( @2 }& J* V2 U/ Q
可能安装了多个python版本
g# \- _: k: X7 |$ x3 J 安装一个版本即可
& E& O$ H- W. s' T3 d Python做爬虫到底可以做些什么呢? * R' k( F8 G8 a7 ], t$ \, }# N
q9 ^" m- e& L1 @4 V# W
5 d1 {6 c/ m8 |: E: c
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
* y8 j q% Q% [6 J 12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量 % y3 x0 `1 x) d, @( f( q
可以刷课 可以刷网课 自动 还能自动批量注册账号 4 s5 M! B: w. s( Q" K3 T
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
0 {1 r% y$ ^# \9 R2 D 普通B站视频可以爬 番剧是需要会员的
" N5 G1 h# D+ z8 d + z' @& W- g3 b4 {) ^
& o/ Q$ ?- o- W, ^6 b 爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
$ E9 W7 _) k. S- y0 M$ y5 Y
$ f8 W7 j w& T5 [/ m 7 P. J3 h* l( v$ B
1. 确定目标需求 (弹幕数据 那个视频弹幕)
0 n) E& I' }& r* B" n7 y+ g1 V 确定了
. f' p1 ]: m; A+ |) [& J/ \9 V 2. 找数据 (数据的来源分析) : z2 g' `8 a1 T" H/ E
简简单单 找到了
/ n2 O( s7 k3 `: Z6 x 3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
; K+ H: x* X+ Z 请求方式: get / post
& J6 \. \2 W6 `2 ^# g* D. U6 Y 请求头:
3 V, r% H; C H( Q" E https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
4 r4 O' P5 K% Q( h& J) |" { (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站) 8 W: H! C" A; _. [/ X' K( }3 M4 F: k
4. 获取数据
# b8 d' t" ^& w5 z- M5 [ 文本数据 response.text 获取网页源代码 ' ]. y( _. u, B" e
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多 ' v( o% |& W& V, o9 `
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
j j4 ?: [! `/ o/ N+ i 5. 解析数据 6 I8 O0 u% H7 p: m# ?: j
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
& _2 y$ n6 M; F6 u9 m' |% R# o 6. 保存数据 - X! `' p7 V. K4 \# Q4 Q
1
) O1 P' C$ K" i& p6 f 2
# I/ [8 ?, u5 E$ H8 p+ ?$ Z 3 ( ?& @& J7 ]3 @- G2 N9 i7 D) ]
4 @" {3 [) i. l7 W' P1 g
5 9 g1 V% Y. Q5 N. M
6 % g* b2 @. R' d1 w' Q" N' }
7
7 l( y6 V: B" u( n 8 * D, w2 f7 u( x
9
) d3 U5 H* J- a) w 10
% j" q; H) }) u8 h# m. Q% j 11
6 m7 j: w8 H' U 12 , w5 K8 v$ [; l; O; m1 h4 z
13
" h4 e T+ \6 p: H* ? 14
* F+ s' k' U, C! o 15
: T7 u8 i$ H0 C! K* g5 J7 U- U 16
( {: u% d6 w: }% N$ @9 U python除了做爬虫数据采集,还可以做什么?
9 ~9 G2 C4 b$ B) f 兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包) - I% W; b: \# Q' Q. \* `& G6 H
M# P4 \& i$ B6 g
+ ?3 G7 }/ M7 F/ o( p/ p
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K / `7 v% F4 f* c) x2 v4 s- I
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ; 6 T& M/ r" y: N. |1 q) x
我可以做到这样么? " x/ V+ p1 g1 c7 K4 o3 I
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
/ I O8 @+ H/ a' w) W 如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
& c0 s, J9 f7 Q3 D: z" x 6 Z8 c L. O3 ^3 ^5 ?' O6 v
" }6 s: v4 n3 S( D& Q _
爬虫开发(脚本)(就业/外包) 可见即可爬
3 G1 l5 l, A# V5 s0 [ 虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
0 R9 S# Z' W$ n* f9 y* K 很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!! 8 w3 y k4 Q& o( P. t
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来! 5 G9 z* g2 y/ h5 x
5 i0 c. r2 s$ T$ i
. v; e3 @* |* Y$ I 数据分析(就业/外包) ( O: S& F9 |% z4 x" p
6 v3 I! q2 ^4 C % v/ u& E9 E' r% ?! E" ?
自动化(脚本)
6 {3 m7 q" p9 J# y( ?) {: a6 T
, Z' G% E. j, Z, O: R. Q ; g( Z4 `, q! ]6 Q8 F3 e' o
游戏开发/辅助(脚本)
8 R6 X% I3 i4 I9 n
7 p: h! x& @4 X9 |9 V$ [ / n+ P$ w6 _- s0 O1 h% M$ O8 c
人工智能(研究生以上学历 要求很高)
3 T& I7 q# Q* ?
! Q K& y+ U: u2 D R / E' G; C. D) v8 q N
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。 ( @5 d H( V' W+ l5 F9 G
, v/ v8 z$ S/ [( y' H7 H1 u
4 i3 {$ z9 I) E; J* g1 \$ I 我们开始正题吧
. Q \1 G5 B8 Q$ |3 O0 y
3 Q$ \$ M' l6 m# E' ?$ y 8 c1 ]$ k" n% w0 c3 l( k
爬虫部分:
8 [$ ^ Q! c- r" s( D$ t 发送请求 第三方模块 需要pip install requests * ~, E( p" |: H" F4 c
" Z* B4 V; x2 I' ]4 {6 l. l, j- k+ D " g3 W' w9 g, m: N
import requests
6 [% t. X- _ m7 c import re # 内置模块 8 K) a; C, E f ^
' I! o& v. p$ @
. D8 I' L& j! P7 q6 v+ u' o
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196' , b- a. e2 H+ g; i% d
1
' j( P0 E2 n/ Y% S; s! v 2
i; {# |% O& r 3
4 R4 S5 d. a& o2 i2 [ 4 . l; f6 f2 p$ C
请求头的作用就是伪装 , P2 Q5 J2 _3 L; p& ~
' v+ o+ R M6 v b9 x2 \
, @. J# t" a( X `- S- g, L* G; o headers = { ' x+ A( b! C0 u: i& M6 E
'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' " l$ o( G5 k9 H+ j5 W6 G& N
} 3 }% Q( y% n% Q
1
. s' g* Q7 k8 h/ q$ i 2
) S! f4 V1 c% A1 T9 e- j; [ 3 * h$ n N+ J3 B
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
2 K5 n! F: n# y 函数传参
$ O9 E3 |. {; p5 H# ~3 s* O
. G' Y7 I @' i7 }1 J
% U" E+ i1 ^. w' X response = requests.get(url=url, headers=headers)
# w9 B5 Y' k2 u v3 W3 w: e 1
+ V8 m- T3 h) h! X. ] <> 对象 对象意味着你可以调用里面的方法或者属性 9 b3 D7 {! r" W" @9 d L
200 状态码 请求成功
; l3 _$ p% D! T+ _3 P- e 获取数据 文本数据
5 E* h' ?! j5 E5 l* R2 M) u 自动识别编码 ; r+ d/ W5 P; R6 ~/ A/ Y
) c1 m# H: }! c6 E. |
( e9 @1 d: W% B" r& a) i# O
response.encoding = response.apparent_encoding , N+ I& R+ X$ s& p/ A+ u
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
2 s' K2 S s% ^9 D; g! t 1 $ S J' Q H5 }, f
2
$ a/ I- q/ Y7 m6 @! i' Y content_str = ‘\n’.join(html_data) , @; D3 \# T2 f- ], z
" v& g: Y3 h9 k: M3 F7 D. S, @; ` 7 Y+ x. p( `- `3 n9 n3 m
要列表转成字符串 ‘’.join() & c! b/ x/ |7 N' l' t" Z: l
for 遍历
: y+ p/ e2 o1 L3 y/ G# l 保存数据 保存字符串 ' g! U0 X1 y2 q& y" j
for content in html_data: % i# [+ D9 l4 r0 g: v0 H& j
# mode 保存方式 w 写入会覆盖 a 追加写入
v; p7 e" n* X" \& i with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
4 M2 c$ q2 L" H0 G1 n% { f.write(content) 2 ^( w3 V- e( W: K# k) E
f.write('\n')
& b5 P8 P4 c% m! I+ z
* v4 F) n; O1 c4 W- a1 S + G f. T3 M6 Y9 b% T4 ^
# print(content_str) 1 r T3 C2 u" t- ?' x$ S2 m8 i
1
3 V: E) n2 E m& C4 s 2
1 Z4 t, d) @. [ u! E/ d 3
- v2 Q5 G! h, t; Q/ e 4 6 w2 D6 g1 M8 X! {" {
5 $ P2 d+ \! }3 W0 ], ~. y- [( ^
6
; u1 Q+ {# s- _) F0 p7 ~% N, v 7 ( v7 E0 w# B* }; |% N6 _
爬取结果 E7 D9 t, ~0 h* M* ?/ f* |
+ x4 l* A; C2 n/ m( e* T, X; A& |+ v & Q6 T! G; F! H0 i8 @9 M5 q, m
4 y4 |8 V$ X% `/ U7 R
4 p6 Y' V7 T1 W! U; ~: I" r- M. b) G5 J
然后我们再来实现制作词云图部分
1 x: J# {" l( w/ ]( g ( |& C* ?. _- G3 E1 ~" W, y
1 z ~% [2 j/ y7 y8 D. t
首先要安装这两个模块 ) a$ p$ P1 q/ @+ L- ?" m4 q
# l# \/ m n2 ^2 @
+ M2 C8 t5 U7 f& @% J
import jieba
. g7 `; e% g: g import wordcloud
! ?; D1 _. H* C9 t 1
# l6 Y& U% s+ W% D& A3 x 2
6 O- z8 i! `/ Y) b( M/ V, e 一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。 6 D2 G, X) H6 M& m9 r
+ i K6 G' ?+ d0 j- z; t 0 o o! x* ?- {- J
f = open('弹幕.txt', mode='r', encoding='utf-8')
- x9 g5 n& ^: S# ~1 N7 X( s, J0 I6 b text = f.read()
) j' L' _' J7 {$ C. t# E) G, I2 _ txt_list = jieba.lcut(text)
+ j; F; K" h; O* } # print(txt_list) 9 V2 r# ^; K) n' X* c
1 3 M8 `8 s/ {5 ?2 Q/ c c
2 0 A. ^( F% o6 x- F. c: s* h
3 7 R+ v4 @" O* a. h, F3 [* B
4
* s$ k6 t6 P0 x5 D$ D. u 列表整合成一个字符串
; d7 ]5 u& E" b! _
Y3 s7 \# n6 y; L % h- o+ i! w5 `) V( a# `, O- l5 ?
string = ' '.join(txt_list) 7 W- ^7 {4 [; P
print(string)
- r% D& X! _+ w: P9 u1 m print('---'*50) ' ~9 N! S9 V; |* g6 ]. F
print(str(txt_list)) 0 G4 `, s$ J. v# M8 v: G
1
, ]- i: ]. k# ~. |' F3 H, W c 2
) _# `( v* t& c/ H$ [, c 3
! Q5 Z- x" P' y2 g 4
/ w5 J# c' ?; V& k- z 词云图设置
0 f% U: F# S3 q6 w8 R& n , R, k( B0 f; @! K7 {$ I- r0 ^
. g. v# [" Q% |- f# c! m4 d0 e
wc = wordcloud.WordCloud( $ e; K0 P) c) w* H& O
width=1000, # 图片的宽
3 v ~% W! k% Y6 Y1 e$ ^ height=700, # 图片的高 / R) Y( _5 Q) o B# K5 [3 q0 h9 J
background_color='white', # 图片背景颜色
) M% r! ?, |9 ] t' I font_path='msyh.ttc', # 词云字体
1 P- H8 u" c( ~* b # mask=py, # 所使用的词云图片
2 c( G8 j- @% }+ @0 [. j scale=15, ! |* T* Q/ I U: w2 T& R
# stopwords={words}, # 停用词 9 _! w% x) I5 M4 y+ H6 e
# contour_width=5,
+ g0 l5 @' o5 w/ l # contour_color='red' # 轮廓颜色
$ d# Z2 t' z7 B7 _( c m( O6 g )
5 Z) H" h1 Y, y2 _ 1
9 E( q! Z0 J) @, ~7 A4 ?& ], ?, y 2 . Q- ]# J7 R: C" \5 m V
3
. p6 g, q6 y) w0 e2 y 4
& ?8 {5 X, g& j$ X 5 R K" h. {! ^% {6 h/ J
6
' ]7 O" w/ b. H( w8 U 7
6 h! `) G, C# ?( G- s 8
4 `5 V8 R* [6 \+ v8 X8 J+ R; s 9
# F( y7 N) \* o: t% h 10
4 \% i0 v* [) O( I' L 11
6 N6 V2 w% O/ u0 s, ^ 给词云输入文字 1 Z5 s! S6 ^5 b6 G
% }8 [" b" s h4 x* d ' f0 t2 { l( R- f. A& p# m
wc.generate(string) 0 S$ K2 e4 ?2 ^2 [ d8 i
1
s% P2 s# X2 J2 e6 q 词云图保存图片地址 1 s, g% o( D( p+ h" \
/ M6 \% d; h' A( v5 i1 O/ X+ P6 ^/ j/ F
3 S! U$ k s N. k wc.to_file('output1.png') 1 Z& q, @5 E1 G1 G) A, B
1 1 M% k, D! h5 o" {: r' a
词云图的过程中有点慢,大家不要心急
% s; K+ A# f8 i$ k# A
# a4 y5 c) l, j% A! u; U + c' c. }$ @6 h$ y0 P. j5 q
这是最后的结果 1 b. _5 b7 K# P8 J i
( W1 G' z( u/ }: w / T8 s2 ^1 {! V! B& j$ L9 c
没有加停用词,所以一些无用的词比较多
4 P+ H! ]* @, _5 v# d * H- g( ]7 q" i: a# R" B7 `0 U
6 ~% j2 p4 `" ]" }& f
stopwords={'了', '啊'} & N4 T, j, k. ?1 t; e. ~
1
, R8 G% I w9 ]8 [ \! N' q- F$ M 把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。 u9 `$ k: Y& O- W3 ?
我们再来看下 ! M- t# b4 e9 a% }0 g% T; G
# \( z# F& s% _$ f: U _' S
0 v+ A; K2 d$ g& s8 Q
不知名网友:666666 牛批 老哥我要学!!!
# O; B e7 o8 Y2 m/ D/ q2 }
- v4 s: e3 d5 c3 s3 s1 O$ }* \# P ' J b9 w7 }2 I9 w. h' n/ j
# p5 v6 ?/ A9 M) }- L0 B 8 S0 U- H' ?0 Z2 ~2 N
———————————————— 3 K0 a( K: I, y! R6 }
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 3 O3 ~# N" G% u9 o# y7 Q4 d% Q
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
$ ~8 W Y7 g, z& }, B Y9 z- m* \8 ?8 I9 f
. E1 g' T0 w" G2 J, |- k7 _% f7 i" R/ Q
zan