- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565662 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174921
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
{4 H2 k/ z r5 U
用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
2 K* K( h6 x2 q6 s1 A今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
, h' \) m" Z7 l1 e. \) [" b3 g康康大家都怎么说!% Z* @' r4 c2 b3 M% X& g% H( V
+ u+ D8 Q- a" |, m" W: l1 l- i! D: X1 ]% R
0 ?- X* A+ X9 ~6 E8 f9 A' U- o3 g5 a1 e
/ F4 R0 [7 C: k1 B; t
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
J) S2 R1 B; F* j- E0 T% K( q5 q9 r2 C( Z& q2 ?3 Z
" ` f9 P; v' F; X+ F/ r
如何安装模块:
3 A- c& O* Z8 x1 p3 @/ \; R0 Q3 o# |$ b0 I% A( p1 P3 q
. q0 p5 B+ p& p5 `) r+ j( n
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车6 G& ]# ]5 X! {% V# o7 v; G
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
" r: l: N* [& o* t" g如果模块安装失败了,可能是这些问题:
, t6 p4 M& w% V' ~9 P& A4 Q) X9 ? }9 T2 n1 K1 N
, G) y, s1 a6 y1 w# ~& {& H6 F! O: ?
提示:pip 不是内部命令# T& {4 I& F0 k6 D
你python环境变量可能没有设置好, Q9 K) C5 }8 g7 j* K
有安装进度条显示,但是安装到一半出现报错了
$ s$ S8 I; ^0 \/ R& b5 E* |1 [因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB3 ]& ?0 ~! Z' Y d
read time out 网络连接超时 你可以切换为国内的镜像源
6 F. S, Z2 P* y明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
, x' _! E% ]% |6 T8 Q' S你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
% `6 D l4 i0 {7 z9 s可能安装了多个python版本- d3 w3 d+ v+ b: ?* T# U& J
安装一个版本即可
& N" Z1 \3 V! A3 nPython做爬虫到底可以做些什么呢?
$ L2 x% [6 n, q9 v K
: W k4 T# t! Q# z) \8 S4 H. E" k. ~- y4 t
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
- v+ R q0 q5 l' ~4 {12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
' O" Q. v" j# P7 x可以刷课 可以刷网课 自动 还能自动批量注册账号: g) m4 C3 v/ I( T+ v9 E0 N
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
" Y) ~: S2 B& A6 I5 U9 U' p% v普通B站视频可以爬 番剧是需要会员的
t6 v; @$ [1 V( d% o( r! {
- K1 h Z% L5 l" K- C6 W- U9 K& k) ?5 G' k# F
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)9 h) X9 K- K+ E. d* I( V
- i* T# W0 b3 Q1 F
- |; [, K y6 k6 t% j2 c1. 确定目标需求 (弹幕数据 那个视频弹幕)! I$ q% |$ F, `9 Y" `6 Q
确定了
' ]: Y$ R; R8 v, N7 V1 B2. 找数据 (数据的来源分析)0 j: I8 B% C4 Q8 K' e- [6 u
简简单单 找到了
$ o' N" H( V" R5 N) m6 N2 W3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)$ [+ O) c" b+ l, M
请求方式: get / post8 Q" }5 g+ d( q0 i& \' w; C
请求头:
0 A3 E" G. z+ ?' q- T https://api.bilibili.com/x/v1/dm/list.so?oid=3762001960 S9 T/ a/ b' Z. E! J! ~
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
5 h$ U- W' ^8 o: `0 ]; q& j7 I5 h4. 获取数据 8 r7 o% {. X k3 Q1 z S& l
文本数据 response.text 获取网页源代码
, o& l2 \$ N4 T0 C: A. ` json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
1 R0 G8 D- i3 p, p% P 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
( c' E$ w" U! M5. 解析数据! m1 B5 i8 a! \' O9 I1 i" q. p' w# y" ^
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
$ c3 ]! z# ]8 E; q5 N( H: d9 s6. 保存数据
0 s2 H* s, {/ X/ l6 A1
& B0 ^7 U7 b9 d# ?" l20 V$ k l" q. Q, J: ^' _5 |0 v
3, z* e2 K7 O- l2 b" ^2 _
4
- g; U; e5 ^7 z# D9 F5
8 G' N% P* d6 \! i; v) C6
# I( ~5 U9 `6 G! R8 t7
2 Y" P7 s) i( y2 m8 }' K2 N8
$ V8 f1 X2 L* Y90 k" H7 ]6 E# V* \" }8 g; m0 S
10
0 }3 _: X1 d+ ], D+ W+ h; Q11
9 f: K- O- K v! S! H0 X12
E3 w5 t0 M! \- \: J13 ~% X* e- l: L, d" Y% S! s' e/ ~
14+ C: G% X7 j8 i; \# z: A
15* n7 m/ G+ b3 \3 d
162 T: Q( Y( Y- X$ V! o
python除了做爬虫数据采集,还可以做什么?
8 c U* g. E$ ?* y' d兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包). m0 O1 N; O j. q9 e% o
& `1 s4 t6 l: k2 l( E4 ^
1 U& U7 j5 M4 b2 t/ ]: L" y
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K2 w I) J; Z$ q" \6 a( e2 Q
比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
, I' ?- J0 W% f8 {4 w7 u, L我可以做到这样么?
0 B: z9 R4 x. L% e0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;+ v3 V! h% L* C$ v2 o
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
% z: E+ J% Z p4 j: @: z
: R# d6 I9 U; t. S1 @# p' U$ v. m
% A9 _/ ]$ ^% S( x, \" L9 j爬虫开发(脚本)(就业/外包) 可见即可爬1 Y0 d, C' p& U% ?+ y0 C& R- d
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
' }# f9 O) Q# C6 q/ @" u很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!* n, g9 m2 ~8 f3 P) a
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
" ^" o# {/ u: \. @* W! r- ~7 K0 U/ r. C
8 M5 ?" g: I# \. y0 y" d数据分析(就业/外包)
' b1 T+ o2 l7 _3 R" N i$ Y4 D2 ^2 L' f
" u4 Q. ^1 H0 A0 H) y, S& F自动化(脚本)
* i6 K4 R. p3 n& `
8 V$ f! ~" S {3 H5 T% S
$ h' z; z& @; E' l1 L, ?; S6 [游戏开发/辅助(脚本)# H4 X; ~# ?, O: Q+ ^' F& p: b! L# ]8 r
) T- h1 I# y( Y: `" `, P
" ^0 V+ d! [% u
人工智能(研究生以上学历 要求很高)5 n8 k2 `& O# F9 {$ C" ?* ~% u
3 H( r, R3 b3 x3 b2 ?, x1 y" M+ H/ P( X% k1 ^2 t; q- S5 ]8 C
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。$ m! f" P+ R2 a Z" J5 m
) t. x3 V' L4 V: M, p9 [( z4 H; x3 H7 u0 R
我们开始正题吧; A' Q' L+ F% j8 i4 d. m
% o$ { N7 w: y0 X' }0 Y
2 L J ]! r/ u, A" G8 A爬虫部分:
6 F7 @& ]0 P+ D7 m! c( X6 b1 r发送请求 第三方模块 需要pip install requests
- N# R0 q' ~/ x' X1 [% D) x! {2 i( w
- P% O5 d3 l% z3 R3 B6 d7 \import requests
! d" F4 n& Y9 S8 C7 Wimport re # 内置模块
. r7 ?( I9 ]9 J( Z3 K2 L5 H# J
5 ~- j/ c+ N- k& J9 Y
) y* v1 h" J/ Z5 [+ Yurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'& W! s9 j0 ^/ _. o" X$ B5 x! J
15 _5 b) t* L; S; i! m2 G0 U
2
. Y8 J3 w0 o+ a& g7 L% W3/ V2 A7 S$ C2 x/ c
4) e" _/ j+ a, f* |# K1 F3 g
请求头的作用就是伪装/ F0 t6 d' U& ~# p6 [/ n8 y
' g/ R& q* [1 K9 V7 R, a( Q' c$ e* z% V7 i
headers = {
, \& c$ p6 e4 {4 ~: T: Q4 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'
* }" ?' ~& q: I) R- o6 @ S}( a* X" }! Y) D4 C z2 t6 v
1
, X( ~6 p! i) b2 T" x1 w# L& w1 c& L! y8 Y0 A
3
; d% `# ^2 n$ b% f; f2 c* `+ T4 P模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据% a4 `7 S5 a9 u$ U/ M
函数传参
( j- }, D @" T
0 L5 I5 s# \5 P% R
! |6 |" H2 f* C( U6 Aresponse = requests.get(url=url, headers=headers)
6 z* h, K2 \' Y+ H1
5 ]: D8 W+ K5 S+ V<> 对象 对象意味着你可以调用里面的方法或者属性" k- y. }$ K ~- D. C7 l( {; U6 W+ ]
200 状态码 请求成功! {" }5 L% \+ v' B
获取数据 文本数据4 a, v. g+ U6 C6 Q; ]' y
自动识别编码 {# L3 G* w* i8 K$ z6 s
8 e3 B! O. g7 D
* k- e6 L: u; V9 Gresponse.encoding = response.apparent_encoding* y& _' W/ r1 ]/ T: s% D. `
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
4 W$ A T5 _& P/ [! k$ E" o1
. {5 F. V P" X& C2/ X6 D, \! b. D" R( s4 l
content_str = ‘\n’.join(html_data)( T, v' ]" ~- F6 h5 l
% f8 A! P$ ~$ t& P8 h
# G( u, ]) C* D' K, G/ }/ A# @要列表转成字符串 ‘’.join()1 g8 F6 q2 {6 W) f0 Y! s4 o9 A
for 遍历$ F1 C9 R2 T& h |7 o9 [7 Q' C
保存数据 保存字符串( r$ c* o2 Y7 C. M# n
for content in html_data:
/ X# K0 ~, @9 q/ `( A # mode 保存方式 w 写入会覆盖 a 追加写入
" h9 K1 a1 h ~9 |/ W with open('弹幕1.txt', mode='a', encoding='utf-8') as f:' {8 G3 z. T) m
f.write(content)
9 H: p8 R0 t/ O4 X f.write('\n')2 d1 D- L6 b% l& f
5 Y7 ]0 {9 u* S6 B" B3 Z- u# x
8 b: z* b1 j* U8 X8 @% u) V; L# S
# print(content_str)% V& X* X# o6 k; O! R& Z; ~7 G
1
& B4 m* c$ w7 L7 E/ l3 l8 e& _2; W( P$ \, v3 o, U
30 E% |, \: U; I1 X' S0 M p
4
P1 a0 c) U3 Y. n8 i5
* K8 }* S) F0 M" B; h1 r( j7 s60 Z: t% w, I) g; W3 X
7, K% J; ?" R1 I7 `& j2 K
爬取结果" q+ t- {/ s/ B, |9 D
+ ^" Q n p$ b! T0 D& n- Q
( x) Y( {: j/ b) H% I# W2 u! y5 r" Y0 c6 u
( Z% }& D& a) a j然后我们再来实现制作词云图部分6 g4 o3 @2 f$ Q/ K% J
) z/ D: j. F2 c% w4 V- C- V; w! O" d
L/ G* z1 b8 F# r j7 m/ L: h. G! l首先要安装这两个模块; T( ? C, x7 U$ q: [8 D+ P- h
, t& Q6 ?2 h& }; [5 ? x0 Y K
9 y7 C; e0 [ S/ l( U5 H
import jieba9 _1 H5 `0 n- V+ Z" x( _$ B
import wordcloud4 s' R, b- a6 ?5 G' r( Y
16 A( h9 V. f: U* k# `
2
9 K# \+ K' c/ t& s$ R& p一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
0 p1 U) \3 v' \3 H
1 J6 h7 S! w+ S) O/ p z+ x) N; z( X; U$ \: m# R6 J
f = open('弹幕.txt', mode='r', encoding='utf-8')8 I5 U- i9 e6 [+ R& p( B
text = f.read(). B: e- _1 ]# Y# T
txt_list = jieba.lcut(text)/ m4 V7 o L6 i$ }6 s% P- ?9 D) l
# print(txt_list)
' H# a" c1 e$ o$ g1
$ h/ p7 _6 y ]" Y& X* z& K; p& a24 `; B! J7 k) C3 ?
3, w" V% }1 i$ t1 c; L, h
4
1 {. v- |( t# W5 {- B+ P# g0 q列表整合成一个字符串
/ q, s- i/ j0 l) @5 @" U
% Y: q" M1 F9 B
) S2 D5 C2 V+ G2 ^" tstring = ' '.join(txt_list)
, Q# Q8 Z5 t3 zprint(string). E0 E6 n) C1 P0 i/ T$ Q+ t
print('---'*50)6 S' W+ L/ X5 }( e: c1 Q
print(str(txt_list)) s: @6 S( z4 o, M# _6 p4 V$ Y4 Q
12 e5 Y! J" ^. S% n7 X* M
2
* a6 @( G \. i" Y) s1 J33 a1 v" A0 v& e" D0 D( D( M
4/ n n8 i% G- D
词云图设置& |0 {( x7 G' a/ f0 n
+ y; c$ {- \, a1 A4 c5 a5 m# B" E
- h, q) U- A1 Q% ^% p
wc = wordcloud.WordCloud(! w+ l3 I" J) T$ Z/ v( h/ l# \. t
width=1000, # 图片的宽3 m6 V; D- D0 n* n" ]' E' F
height=700, # 图片的高
+ E9 f O1 H: w7 v$ `; D background_color='white', # 图片背景颜色0 s; c( g( l2 K
font_path='msyh.ttc', # 词云字体
: X. B3 ]" b( W$ h1 {/ b # mask=py, # 所使用的词云图片( H ^$ p5 ^& G( ~7 ~8 X
scale=15,9 {4 ^: m. Z0 J6 n+ ~! B
# stopwords={words}, # 停用词
; L2 [5 E# ]1 P0 ~) ] # contour_width=5,
; N! L$ j8 L- |1 I7 x # contour_color='red' # 轮廓颜色% x: \* u. A0 d$ q/ e# n9 N6 L& W& e
)1 ^6 p5 ~1 o3 s4 v% @
1
1 c( u: }1 k! u4 H7 N23 W/ D& {0 q& ^
3, Q; `+ r- t- T/ b6 R4 k2 N3 b; k
4
8 N5 }6 A8 o% z- M! l/ ?4 A6 W5+ s8 t6 W' F; o$ p) r7 [- C% z
64 |( C5 L' ^4 w5 C& @7 F
7$ M, q1 Q; p, ~# v/ y, D$ Q4 i
8
$ ?) s9 J3 J( y" o2 @( }9# p, a5 I3 b" s4 f
10
7 |8 f& c: y8 ?; |, q1 i116 I7 i2 f2 y# L9 B) t5 }( C
给词云输入文字
5 x8 M j/ k$ w! Q
+ c, K# v2 k; v1 G5 b" F& ?8 V$ d6 A) x a
wc.generate(string)8 |7 J8 S- T4 u, v
1' F) l6 f$ |9 l. X; d' L. K$ J
词云图保存图片地址! U$ i' d# x: o
, }' l2 C! V* |' K9 R
- ]% E8 a9 J( `9 `5 f6 v
wc.to_file('output1.png')
2 ?5 }3 a8 M8 S. x/ }' B' Y& a1
. h# s8 t& l$ X4 Z$ U# q0 F0 A词云图的过程中有点慢,大家不要心急; M; a9 E7 n% o5 i# O/ n
% o7 J+ s9 s h) h2 e
# d3 o2 u' {; n6 w( Y: t这是最后的结果
) q/ f& U( Q( ?% M
. G2 ~: N R. F' _/ @4 Y- z! k0 h0 t6 [4 _+ `: @. o. Y& g" K
没有加停用词,所以一些无用的词比较多
% J$ q4 {0 N; W1 ^( U
1 N. E9 E- [9 R2 G+ V" q
6 I. @: s+ a, q2 n# _+ zstopwords={'了', '啊'}8 s, ^4 g2 ?" E, d( M& z
1- `7 m' @6 f5 i4 Z i: R: t
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
0 {, F& C7 ?) O7 l, t+ y我们再来看下' J/ Q+ i+ k7 V# M" z
4 u: T# ^. ]! F0 h* i. l; E# {9 z3 }- |9 `+ M2 N }& {
不知名网友:666666 牛批 老哥我要学!!!# d4 i9 S; c$ V; s0 m
/ M, U- L# H7 P+ `" \$ p, P/ ^7 o/ v3 X4 q0 x j
) w9 H, \5 v, w- k7 C
8 x3 C6 V( k5 b* f, B6 Z2 S————————————————
* @% d Q* l' e* Q8 {/ ?( _版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
$ F, n$ l" g! U5 G8 K, r" V原文链接:https://blog.csdn.net/ooowwq/article/details/119211907# \- c; U1 S% t2 L+ G* |: }7 L
2 ?, i5 j# R2 {
& E! }+ q! Z G& A8 F |
zan
|