- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564455 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174559
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
/ Y+ G/ [; O, B用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
( m, s0 ~1 p; r今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
# S4 N) `' A1 u* @# D+ \2 K g$ v5 i康康大家都怎么说!
$ j$ r2 y3 T; x% p7 {9 Y1 o! A4 f6 m( G! n# f9 u
1 o8 C4 _( {8 K; [$ z" x% H
4 M: ~7 b4 E f5 a2 D G
# [% u5 b" [, j) h8 [开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
# R7 M, | I' Y4 o" _8 e0 G. ~" Q7 \* k* ]! v* O5 ~% \* S
* j# ?1 I$ {8 ]: u
如何安装模块:
; E; L1 F, C# T. t+ }# c9 G) J }
m5 P. ] V! F# x6 D) V; Vwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
- f! I! y/ X, L( ]& i4 [pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
5 [1 x, g3 \6 _如果模块安装失败了,可能是这些问题:- e/ s6 i& k2 G* `; b# c; }* L
) s7 m' q# G/ D$ g6 s7 n E
9 _+ c% a+ t' {7 a. _提示:pip 不是内部命令+ M9 p' O2 k" }# q
你python环境变量可能没有设置好
0 d8 f8 \! ^) n+ X1 c4 ~/ A; ]$ _有安装进度条显示,但是安装到一半出现报错了
1 G. \4 T! G1 _$ z8 \$ E+ r' |" B! a因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
5 P0 A, c/ C2 h( {$ Oread time out 网络连接超时 你可以切换为国内的镜像源/ ~+ b4 [, e* h# g+ g' h+ u
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
7 }. X- c& }! C# H2 ~你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
$ d7 x4 _% [0 E# E可能安装了多个python版本
\1 ?5 o1 [" c安装一个版本即可 }8 x9 X3 {6 o' u: {5 u/ l8 U
Python做爬虫到底可以做些什么呢?3 m# B4 ?8 e! F3 G# u& V9 ]" w
2 @+ L% X1 y1 z& @
- u+ Y0 R$ i3 K+ A+ C, _常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…# M. [* k6 ^9 W9 b4 R
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量+ ]7 e! H' S, `# G- Q( j* V5 {
可以刷课 可以刷网课 自动 还能自动批量注册账号6 x" Y. d* A; |
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
# u( r) M V' U; o2 N0 S$ `4 p0 b普通B站视频可以爬 番剧是需要会员的! z& `$ e2 _- q( t9 X' x% p* g, q
[, o# n" c7 ?( I; |& A0 a
# [2 B9 m" v2 D% N, H: F. |% i爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
' J X* S% Q8 X9 B7 c; [' \0 I. F/ {2 k' h
) m+ x$ F; `' ?1. 确定目标需求 (弹幕数据 那个视频弹幕)3 I, i3 K( {8 S; J( D: L; S9 [ \( [
确定了
$ w* ]1 o6 |& y+ i2. 找数据 (数据的来源分析)4 |5 F0 N6 D0 x% K4 y) V
简简单单 找到了7 |5 _4 q2 b/ F& U7 Y' @
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
: B* r9 P" S1 A; e! Q8 \ 请求方式: get / post
# Z+ G5 n, W' I1 C4 a 请求头:
8 w% S4 {8 r9 y0 C/ `) c, m" }$ i, I https://api.bilibili.com/x/v1/dm/list.so?oid=376200196+ M5 g$ u+ s' z, |0 x
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
% x6 z3 i+ @4 ?! z' S$ q4. 获取数据
* f( l7 E5 k8 z7 L0 k$ c% F 文本数据 response.text 获取网页源代码0 |) j, H$ p& L) H
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
* A' `8 b& A8 s& j5 u$ r/ c; M, J 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
1 G$ P+ K) m$ g' f# Q7 z: U5. 解析数据. C; j& ?* _3 V& e! T# z
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 5 }; }2 U R7 F; B9 v* {" _
6. 保存数据 b* k1 `3 h# k
1/ o+ n% i& J8 c: f: z& ^: k
2
' [7 A( h" ?9 T: P3) k" ~. g4 s0 b2 e( |+ f2 @/ X
44 @0 O; t. A' L: R: L+ @
5. m7 S# w; t' |% f) C
6
" X6 } \4 _/ O' y9 A78 G2 m [0 k& [1 f3 L
8+ a* i. {6 i M. G* Z0 c
91 o4 }7 ]/ B' |! G- y
10 q! n7 ^% n( r
11+ j" X2 y. h$ s: J) F" x4 q) x
12- A0 D u, u0 y4 E
130 y& ~% E3 O( |; ^. a" L
14
! Z+ K* f3 J z( F0 N( N15
: J7 Z/ v. @% ]- |4 ^8 \168 z, l2 S. t1 \# X5 S
python除了做爬虫数据采集,还可以做什么?
5 M7 V {. B1 h0 f兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
! Y! _9 s, k' I) f9 _; c! m
# g4 c; x5 h" f
. Y# ~ I* {6 {$ S网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K7 ~( ^% g" U; `" Z
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;" L f, l5 _5 T* F( E) `7 I
我可以做到这样么?6 a- W3 n1 ~6 N
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
& ^- o6 t$ a. d# F$ U6 ~如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
+ d' V1 D, u6 @ S, n6 }8 `0 M7 x/ G- z2 z" ~( r
3 `, x* T" K7 Q1 ]爬虫开发(脚本)(就业/外包) 可见即可爬
" t& p# s$ Y. b: h虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
* l, j; f9 a# _; } y1 x6 A+ [很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!3 v0 b" e5 R& N6 \
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!$ I- `+ ~0 P4 g" _1 d
/ U" \) g( E5 j: m) B7 H
* L- a }: A1 a+ c3 P* K" C) M/ v+ C
数据分析(就业/外包)4 b8 z; F/ P! s2 C1 X5 a+ u; I
6 W5 ?7 S; @$ ^! K5 r% Y& M' M
' d( G }" e, _0 @, y自动化(脚本)9 ]' I" v: D. n7 q M0 n. ?4 B
( k7 M6 ^! h( C. A8 ?7 i1 \' M
P1 d' V ?7 D+ K0 Z* E
游戏开发/辅助(脚本)
* q: g9 G. Z2 W# K, y* ~
# f* D2 Z( I9 @ p0 v7 v, A: B( ], g& ^' S" x2 v7 o
人工智能(研究生以上学历 要求很高)
4 {4 W5 z5 k) ]4 J; U! v% V
' c4 ~$ ]. I- Y( b9 H
; b: n, W' q7 j9 R6 n5 q$ Z& c等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。, _# X$ F. \8 t4 J
/ c- v. \3 X8 q. u* l
* M+ N0 A0 S- B6 g4 N. M3 ?& l
我们开始正题吧6 W; b# ?2 }. E, X1 F
9 J5 c2 N O7 I: x Q
( p' n1 o9 d: D2 f/ h爬虫部分:: N5 p8 P. |* U
发送请求 第三方模块 需要pip install requests! W7 x }9 v9 ~ Z* Q. r' Q' I
$ U) t" ?" \2 p# `# R
5 a6 b+ }! m! \' E' t4 p
import requests- R0 s& U/ y; k8 Q( G4 p8 X) Z* Y
import re # 内置模块
; u5 [8 z; { q3 X8 B
1 ?0 V5 S, x/ ]- ^
4 P% ]; u! i3 G' r) `url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'
4 L. e c4 |+ [0 |# N4 i: [1- Z" m/ F! o3 Z
2
( m1 T* r- k" t3
% X9 M! U' r$ M2 W1 b1 _) W4
! G: x7 y# G6 ^% F5 d" c请求头的作用就是伪装
# |0 N+ {7 d6 _: u0 ^# N E! B( L, L) n4 o. H4 h* L' K; r0 Z
& l/ O0 D$ X3 j/ u
headers = {
- n7 _8 D% h: T- n. X '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'
6 e7 f. m4 P: F, F}$ S2 t) u7 `! Z3 W2 o5 Z3 b# ^6 @" ^
1
: q% M$ T6 { x& c2
: g7 L1 k6 \3 d# D: c4 r- Q0 g3# [% j$ P# M/ K$ a, k# b1 D0 z: q
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据# `" I6 ]: W- u i
函数传参( c- I$ n Y; {8 l3 X- I& G( L
# P+ g5 ~, Z0 B/ X7 d" k" }
1 Z9 V5 _; _7 M( {) g- Iresponse = requests.get(url=url, headers=headers) t0 i7 u2 q) U
1
' A2 |& K* u4 l' c4 @4 S' _$ E<> 对象 对象意味着你可以调用里面的方法或者属性6 t W4 X: E9 ?7 {" ~9 K( s, N
200 状态码 请求成功, i) A. G: v+ l A5 A: F( m
获取数据 文本数据2 {/ ?" N& D" d* Z
自动识别编码
( N4 o. J3 ?' ]( n9 \: d. F5 f/ S% X! i/ L I2 ]. E
5 s' s: z7 N7 K' R9 d
response.encoding = response.apparent_encoding4 U P7 o8 x: d
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
7 r" @7 H) Z. N W4 M; }8 h15 q6 B& H$ l c$ W4 ?/ R7 q
2& w$ Q% Z& R3 p/ O. m6 u
content_str = ‘\n’.join(html_data)! H4 j6 c& B( D: b/ ^$ H9 b6 N* g
! Q2 m: ~7 M# Y4 G* P
/ l' ~0 O$ O9 ^# R% M( ~+ J- l
要列表转成字符串 ‘’.join(). ^9 c& b1 N. w. n
for 遍历
- s& F, X; _5 m5 U( O4 W# Q保存数据 保存字符串2 e j; c3 f9 }5 R3 ], }9 ?' E* R9 a5 o
for content in html_data:
4 v4 j$ J' E F- B2 w" W4 {2 j # mode 保存方式 w 写入会覆盖 a 追加写入
4 ~! E$ J; Q | w with open('弹幕1.txt', mode='a', encoding='utf-8') as f:% p# j# U/ w$ G: t1 Y# P
f.write(content)
/ E$ k4 N3 n8 [8 N' ?: ^) H% { f.write('\n')
% l# ^3 J0 z/ R/ U
6 @' w. o2 E( Q3 w5 \$ P% S9 z5 W9 \9 r! g* v9 A; [
# print(content_str)& S8 _) a9 Z1 ]! n+ g C3 b
1
. k2 t3 i$ d. c9 s+ `+ Q8 h" y23 r5 J9 e. I' ]/ w5 H5 a; E: |4 K
3% L( b2 `2 j4 {+ n9 x) q
4
2 }2 D) m- r* t3 {5
) e" J' M! x+ S6" C( r) H. i& q# ~$ b
79 G; _5 B' _) c. X
爬取结果
1 P3 l( [6 Y- r7 z6 d( S1 R! p: q; `1 O) [5 w) ^: `
1 j1 C- e' [4 s3 h( {
! I b# X( l0 m8 \
3 @# I6 S8 K6 z/ B' Q
然后我们再来实现制作词云图部分
' }% Q u: @6 b$ _3 \7 C: D" N0 |, S5 o& v
" `$ y0 j, Q; y" U7 r; y3 v首先要安装这两个模块. W4 a% d% W+ ?% \/ a
8 N5 w: o2 W' a7 o
! J# Y5 f2 U& E7 W1 fimport jieba; m3 y! T0 G3 J5 Z0 W: X* X
import wordcloud( i9 A2 J+ T" I" v5 a3 T
1
3 \( B( x3 H$ L& Z9 a& U7 a$ S2* Y6 H! B! z( C" z, ^
一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
7 b" L' \. `; i" u$ s; t, z( o8 ^0 p
" q4 a* i3 n! [ w: [2 {, D. N: h& A2 P' U
f = open('弹幕.txt', mode='r', encoding='utf-8')
9 J) A% B( x' T) H: utext = f.read()
# o( {1 }" K9 Etxt_list = jieba.lcut(text)
: }: H. i8 y. h+ @# y; p# print(txt_list)
+ K) ?7 }0 [ \6 M0 I( A11 T! y, ?/ S' {! V9 w$ y8 g6 g
2
* z: t/ p9 u! ]9 v3& Z) u1 o+ u* g6 p0 q! B1 S
4
3 i4 N4 u% s, ^$ v列表整合成一个字符串
3 g( ]% K: J/ A& C3 t
1 I m+ b& x$ x% u1 D. V' r0 K9 z- s# E. i1 L# d+ Z
string = ' '.join(txt_list)7 p6 r6 L- V9 R
print(string), w% e& C5 `. y ]3 q4 S* c7 M1 @
print('---'*50)
* R4 F! j" v% a3 n" h9 Uprint(str(txt_list))
/ X) Y$ [' Y. Y# A6 T4 @1
6 H5 Q1 ]6 {( m: I3 v2
4 O' }9 e1 Y9 W38 W6 M' K6 ?: B1 |; h# ]7 T
4! }1 R4 \, Z: g3 `
词云图设置
5 R$ W/ K5 K! B8 M/ S/ U3 \# C" K1 S, y
- S1 S8 c* U1 e3 Jwc = wordcloud.WordCloud(
, g( G, Z% L. P$ z width=1000, # 图片的宽
0 m& \$ J$ B" \; Q! f height=700, # 图片的高
- W, }! l. W. z; V' B, w: b7 _ background_color='white', # 图片背景颜色
" T$ e& Q! |2 j$ W1 c font_path='msyh.ttc', # 词云字体
5 R: @) h8 t! @) y0 k # mask=py, # 所使用的词云图片
( R+ D7 d' J( p* @; b: L scale=15,
( [) }$ A7 Q* o$ C # stopwords={words}, # 停用词
1 o+ t7 x% N0 s # contour_width=5,
3 R" T$ F% L- t$ J" u }" s # contour_color='red' # 轮廓颜色$ N8 B9 r. O2 E& {' {/ e
)& i# s6 ^" q N+ x' n# E3 C
1. v0 x/ F* k |3 d4 K: V' F3 p
2
C# f, N% C: A5 k, }! O! E, p3
9 K4 t& H+ y/ H/ j' G% _# Y, @* w4/ @) f, |0 A' F. H
5& N7 e7 \: _+ z" @/ I/ }7 f1 ]. k
6
/ y( B+ D2 c. [. Y3 [( x' U7 k71 A0 t4 _2 \4 Z9 J
84 B6 ?% @# l) i) Y% Z* O& j
9
2 R0 @. j$ j5 B* h10
5 c4 O0 i5 f9 }. N. y113 j# R5 n7 x+ v4 k$ m
给词云输入文字
( l$ o7 A- E1 ^& }( F A* W9 `) @& z
# Q+ V4 {; r" ]0 y& ~8 }# y
wc.generate(string)
1 J4 K( q/ B+ x1 S1
. H4 V) L% ]" n, G' F( C词云图保存图片地址7 t. p0 l. d' q+ t4 `' \% _/ m8 t
8 B( U' N. O% P# f0 J7 A- V3 H* `$ x' T& {2 u3 w. E
wc.to_file('output1.png')
d: y+ w* G+ N9 z% w11 D8 I p7 e5 } y" M
词云图的过程中有点慢,大家不要心急7 d. p7 @: a1 F- R' q$ [
5 R/ ^6 @% P; Y% M' G5 A4 r2 J) s2 c; a( [4 ]
这是最后的结果
1 N6 M5 N0 X8 Z" J, N: c. x& Z( ^
. B, d( v/ G2 v2 N+ E n
没有加停用词,所以一些无用的词比较多7 T- T: N! H4 j2 @1 I
/ G* T* ^- w' [- |8 c) I
. W f% S" k; } n, I6 o, cstopwords={'了', '啊'}
& l, U- X) } t# l+ a1 v h3 K+ n2 A B2 O G: o
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
- U6 ^, h% c8 u6 P! ~ |9 a$ t我们再来看下
3 |7 s% Z/ V# p1 E- p7 c) D9 I" J+ q
6 B& C/ s. ]: F M不知名网友:666666 牛批 老哥我要学!!!7 {. ]! c% R: e
6 I7 r, m- E! @, v
9 d3 n6 X* O' j% |& ]4 N
: P$ `5 k! J6 t/ B+ m9 J d* O, K1 Y( ~9 n" n/ x4 o
————————————————% P; p6 k9 b, H6 F' e
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 V6 }0 D8 h. B Y4 t
原文链接:https://blog.csdn.net/ooowwq/article/details/1192119079 V+ j* O6 w' e1 U& d: _% y& n
2 R# f$ E5 `. J" K# r, f
% E5 N: p! d* \; Q) F* p
|
zan
|