- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564460 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174561
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
% e% K' }- Q' z6 C$ D3 E用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
, e( {* H) x: B, }1 ^& ^5 ~( C# W今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!7 e# b# t/ N( T7 N% }2 E& n
康康大家都怎么说!
' O+ m- o p, N: t7 \# I! P4 S1 v0 R: b
& V9 V) o2 N/ R0 x0 [. q( c
) x# g1 \$ ?. O3 Y+ g- x5 b$ t3 b: S) `
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
X# C8 H+ ]0 T3 I; D% E4 O( J
2 j* \3 j) J6 d# D. d4 @如何安装模块:
% x9 C! Q6 I, p4 \: G
* i2 W9 \* _& k5 h# i0 ]" c5 x |; d/ ]9 T. s# X
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车* w: {) F" m* }! I
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车4 t" I. z, p( g2 E
如果模块安装失败了,可能是这些问题:: U7 ~ G0 Z* g4 A# f8 L" X
% y# Z0 c! ~8 E# s4 P
5 Z) i8 |! e# {# ?: P2 J提示:pip 不是内部命令/ i8 c; a) n/ E8 Z8 c1 ~
你python环境变量可能没有设置好; K c" c* O5 F8 y
有安装进度条显示,但是安装到一半出现报错了
5 m% n' G! R' S7 R4 d$ L6 G因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
8 S2 ]) \$ X9 l5 M% d1 a% c( tread time out 网络连接超时 你可以切换为国内的镜像源
# S1 @9 x; t, u4 S" s明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块6 g4 Q" U; U; ^% ^8 U
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下$ r+ ]5 K9 {2 O9 X; T
可能安装了多个python版本: E2 I! n) D/ |" e: D* T" A
安装一个版本即可5 K+ h& Z$ y! }9 c/ v; N7 N& i$ Y4 R
Python做爬虫到底可以做些什么呢?0 N% y4 k8 z( n2 R( J; h
8 f+ z. N/ L5 ]
\* W# e% p# h# L$ {" [! i/ B
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
) K7 Q$ V- B0 J6 {0 h1 o" e- H1 L12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
# f, Q. Z: W$ P D+ }* I可以刷课 可以刷网课 自动 还能自动批量注册账号
9 {, |7 l7 R4 {% M8 {% `/ w x模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …0 `+ j8 m: i1 I; c' M+ a6 i/ C
普通B站视频可以爬 番剧是需要会员的
O! i: x) b) U! l x3 E+ U J2 l' X5 v7 k3 u6 K
/ o8 E0 ~2 [5 K' Q爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)3 @; \- r, ^- e$ f. x
* r, Y; r+ T# S8 V3 d( U
' a t9 E# R: _ K4 @' U1. 确定目标需求 (弹幕数据 那个视频弹幕)
/ ^* G! m w2 y* o/ y1 V* | 确定了, {0 D7 \2 _: D) U- C( {
2. 找数据 (数据的来源分析)0 I$ O% Q' l6 v# r
简简单单 找到了
1 I0 t" Z/ l$ X3 V8 o3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)7 k! g3 n7 y' b+ `9 j4 d, N
请求方式: get / post
; k7 t$ b1 S: {' O' n6 d 请求头:
! V3 W5 w& s% M6 B* R https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
5 I( O8 x. k3 O1 R6 m (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)
0 q. w3 a( t! ^+ q/ x4. 获取数据
0 ^" o B$ x6 N8 i+ g9 T2 E 文本数据 response.text 获取网页源代码
+ W) G/ [. N0 Z3 v0 j json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
& l. o, C( E9 t5 y, Y 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
; p3 o; X, }9 L& R4 J' d5. 解析数据
% n+ g' @5 S4 Z% D$ ?; p 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
' u7 T5 G1 H: L! X9 L6. 保存数据
- z8 ?9 a. j# F1$ ^5 _) V: C5 d3 S$ ]9 v
2
1 E: G" i% A) w% c5 H# y3$ Y5 S$ \- {' l7 j; H
4: X/ l! P( y! B H7 B7 U6 o+ _
5
, j7 N. B" `3 \& F3 g! H- T6
. p. c- Z6 v" T7 c% [4 Z( Q- ^& o7 ]0 F9 \5 n2 m/ h- \8 E, ?
8% }; `2 \2 @! O3 q
9
3 _9 |( D) y/ E/ C0 s- G/ s; a; \2 [10
' f6 B. z' Z5 U: R11/ b7 P! Y4 E# [/ H6 I
123 O/ K4 N+ K! q/ p, |
132 ]5 t/ |- v, Q: }4 u# {
14
. E* M6 H9 T& p/ T" X15& o0 M5 {6 G2 X+ L
16
8 x( r' n3 L9 x% y# V, k+ Opython除了做爬虫数据采集,还可以做什么?: {6 `9 G& Z; F( w" H4 W& d
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)2 I0 f* F8 g% N* l0 d( {
) k) s* e+ d' a n2 B ]+ A- y$ M4 i/ E3 o
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
4 u" s0 D6 I, j2 `# Y比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
+ W. r1 A* j9 n, {; m" Q/ O8 \我可以做到这样么?% }, S3 N: e2 ~2 P' U$ ]1 q, |3 T. f
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
" f5 a6 M2 C0 s如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
* j( n- K2 h% X$ K" J% S
, A8 n" ?% _! X! x
, |% g! R+ ]. R2 ~ j8 E( J0 y爬虫开发(脚本)(就业/外包) 可见即可爬! T1 E/ N4 f& S+ V" p5 C# d
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!$ x( G( ?- N# b2 U
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
1 k5 V2 d8 V0 ~6 ~6 C之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!& S/ R$ P t5 A: A
Q4 y, I2 b2 H5 ~- p; o: r7 f5 ^& \9 N
3 U$ V% w: h, c. f) ]. G: e数据分析(就业/外包)
" z5 h( d% O( u9 R9 _* ?9 M7 f& r0 V, @
1 y2 k% D/ M1 D! s: [- r0 X* z自动化(脚本)
- \6 ]' e( U: N# S
K/ y2 _( {( K" `/ d4 l
. Q- M# P7 [1 ]9 ]( a, y' B1 o游戏开发/辅助(脚本)6 L' g3 z6 C5 p3 |$ H! n
+ P" @$ F' P" F. j) D
4 ~' [& S7 C$ ~; ~1 a7 w- I t
人工智能(研究生以上学历 要求很高)$ }$ C. C9 \4 B* j7 H
# l7 ~' v' {' `* x: F7 |' V6 W3 o! v n A' e7 D
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
S; C5 K% l; o* p v! K0 x0 z+ \
+ U' @8 v) @2 q; q0 `
7 k: b+ r6 ^2 a: q- g我们开始正题吧( Q: Q7 l. N# i% N* u- L, t
% u% [: O5 _. ^) Q+ m
F% o, ~2 T) V: h' u: m5 ^爬虫部分:" K' H* M1 E S: f% r+ @
发送请求 第三方模块 需要pip install requests7 I4 D/ v- [# U' ]. s( |, }
8 y( h0 ]( r" n, U
0 S/ r; E4 p1 D& y2 |import requests4 l- J! o4 p* f7 g* o3 |
import re # 内置模块
, [0 ]0 ?. N- l1 h' g
( N9 Z' f9 }8 k# Q$ w- F3 q4 e* L+ A- G' m0 r" ]: U
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'# I5 R9 z- v% _# N9 K6 T6 ^" T- B( S
14 u. J* S. M, I* j U$ I
2, q2 `) s4 d+ n) t4 c( S% Q
3
6 R M; x5 n& }9 I" n* N- `+ A. @4 r4
5 Z$ E* z+ v* s) h请求头的作用就是伪装+ O' ?3 O5 W/ |. b+ G$ x
5 u& _5 `0 ~0 p& I2 @& D
- c, E+ `! q/ H. W2 p. Sheaders = {
3 ~% E2 m& {0 o% E! H% S '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'- ?1 P% J8 B$ d0 ~3 Y5 I/ U
}
9 D7 k$ M3 V' l, u( y! K6 c1
' K# E' [1 P! B2
! v) F; w- A$ a: @. {30 M3 G# J4 o& q$ T7 h
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
8 @9 S* {2 s0 n. J5 K( h. ]2 u函数传参+ y% t4 N0 F7 R: y% Z
. N+ R0 k$ Z1 v" _0 V* r6 \% k6 c
{* f+ F8 B6 ^ nresponse = requests.get(url=url, headers=headers)
0 M1 M* ?- h+ U6 `. J( y) h1
1 T) L4 g- S9 M2 [2 w |<> 对象 对象意味着你可以调用里面的方法或者属性0 {( _; e8 B; \# }: n" W
200 状态码 请求成功
, F9 @( s [6 r( G; R- g获取数据 文本数据
. L: F% @% q- T+ `# G1 q0 q# e自动识别编码0 B, T/ Y+ E- Z
! s& `, o) S' v' P1 v. z n$ o
0 X) L5 ~. z# t& o4 x- P, q3 x
response.encoding = response.apparent_encoding% P) s9 U; f1 E
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
$ ^5 ^4 _' Z7 d% ~ k) I2 J; O1
. m! I$ q9 d, j! w2
$ ~$ i+ \8 `* z; Jcontent_str = ‘\n’.join(html_data): I% D4 u: |/ a1 f* I$ n
" r" u# x2 i1 E% l* ^
- R' A* S7 b0 P& P9 l要列表转成字符串 ‘’.join()/ g7 Q6 g) v3 k# O) g# L- @1 z7 H
for 遍历+ O7 E* W K# R% L. _: W
保存数据 保存字符串
5 x5 L2 c4 z ~9 Q2 o p! `for content in html_data:
; Y c3 z7 J; g/ r- m+ p5 n7 U # mode 保存方式 w 写入会覆盖 a 追加写入
4 b3 U% ?. V' M with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
/ C$ l3 ]1 L: E1 d+ H; I, U- ` f.write(content)
& U5 P6 s. s, l6 C' Y, K* C$ O f.write('\n')8 @; S R3 H- Z, K* [
" i1 n8 j0 O8 c9 r' N u! q$ ]. V% h9 j. `/ K
# print(content_str)1 T4 C% m: b5 K6 O4 u# ^* Q/ e
1
5 Z. g8 t8 u6 o+ [7 k) g8 E2+ x% g$ p8 o6 {& j2 c9 e$ W7 U( d; c
3, e1 B7 P* b' K
43 `* k/ Z$ e/ D( C) f
5
8 p9 r: v+ m! w& u1 _$ }6( B5 _: j$ d9 ~
7" D# P4 b/ A" m0 ]+ B6 N" V
爬取结果 G2 r# \5 | G: K# U, }
( ?4 [, m. n1 D0 L) m* N1 s. I
: Z2 H5 W5 k, o: k3 c2 A
" g8 E+ ~( p, u! {" D4 p0 R; ~2 A' u5 V$ F9 S( g0 \# Z
然后我们再来实现制作词云图部分) G2 m; \) a" o* t" n" a
1 [% m& E# i! I; }
. E0 W& y+ x8 K
首先要安装这两个模块
6 `% B$ s% `/ R2 V- \3 ~! f
! i8 h2 f0 O4 r3 M/ a
" h1 b) S# w$ l( b, U# i& K jimport jieba- e+ a- N! a6 X, Y
import wordcloud
: _% p7 {- w" ?. W$ k2 t1
+ _ u* Y! Y) s, F/ |* F8 ?% R2
. ~) N* K; k) ^( B( H5 a+ @一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
7 ?; E B; V( A& o: Q! U- w( n1 I0 g5 V
$ y) j. q3 k. q! \& @
f = open('弹幕.txt', mode='r', encoding='utf-8')
3 v s4 V, T+ `1 k; l( @text = f.read()% q: b( l6 `' m. s. d1 C# x# R6 V/ c
txt_list = jieba.lcut(text)* a$ @2 O6 W6 h- M" A8 F! X5 I7 L
# print(txt_list)
+ @$ F5 B6 y) u0 R16 N5 E4 n1 F/ ^+ [4 A% j: A
2; `3 l/ A% V* p& u0 x
3
, Q8 t; A5 \1 s4
/ I: f: [7 p. ~8 _6 T1 Z& I. ?列表整合成一个字符串
3 Z L/ {4 G5 D+ s) R$ X4 ?% n3 Z
, e* c8 D3 e( F0 u5 [$ F" v9 ^
string = ' '.join(txt_list)$ p+ U4 s4 b- K- k! G
print(string)% i, u" L6 U9 C! b& K
print('---'*50), k7 F) O& @' W1 o+ z( b4 w3 e
print(str(txt_list))
2 q' o: m- \: j9 C18 W5 Q1 M! L) p' L# C& J- w' ?+ x
2
9 l2 ~; l# x5 B3
% g$ [+ j( C Q% @4 ^5 x: c# Y; i% H4
7 T+ x% L- B# `3 R! M& p& }3 T词云图设置1 f$ b0 a8 I1 G! @5 y
9 K( H& Y3 X; c U: c
5 J- b2 W3 T# ?0 ]5 L% }wc = wordcloud.WordCloud(
( |, l9 a3 m& l! H$ C# Q/ s3 f width=1000, # 图片的宽+ U! h X# l U
height=700, # 图片的高: Y% |# ~5 L1 r
background_color='white', # 图片背景颜色
' Y6 O0 `8 l" U font_path='msyh.ttc', # 词云字体
6 Z! J, Y9 o( x, E # mask=py, # 所使用的词云图片" R% R1 l. S/ C$ T
scale=15,) Q2 _5 q7 i8 M7 ?$ u; [+ u% x, @
# stopwords={words}, # 停用词
4 ?. v8 T) I' d # contour_width=5, ?+ H- a1 |. B m
# contour_color='red' # 轮廓颜色7 i- ?2 G# Y: \ W s3 c% J+ ]
)
4 q( E( r6 [ M0 Z/ y1
% V6 d9 ?8 a# F9 D0 f0 K7 `6 m1 p& |21 U' B. H) C- S T: R. ^
3
5 y7 y" X7 T) k0 W z/ Z! T4
" d9 F0 p8 ?$ q59 J% B4 x' K: Z2 K4 ~2 D1 V* ~
63 U( B! \* ?$ t! j
71 A7 ^: p& a, ^# y) }$ t7 S
8: d/ ]+ y! k2 O0 J
9- J1 [, z3 d8 G+ A+ ~# `7 C, H
10
4 \* v* l) e8 }+ A/ T# x11
7 ~. u: ~0 o9 Z3 f+ ^5 \给词云输入文字' b# _; c E( p4 P& e
[% x- y8 m& L( ]% l' G+ x
( s5 L8 t' z8 m. }. ^wc.generate(string)4 O3 x6 z" s0 L
17 h1 H6 K9 W* h: S
词云图保存图片地址
2 D+ k$ |* {* h7 V' H. Z% I
7 F6 j! ?' y' \
/ x$ E, A! }& M+ k6 ~4 Lwc.to_file('output1.png')
8 w+ x- D* \3 k! E1
% z$ s5 G# E1 W, T! s词云图的过程中有点慢,大家不要心急8 g: w, y0 h- m) B! k
a8 k- v% I5 V+ r. u
1 X+ d, |% U. U* U: R4 y
这是最后的结果; f: B5 K, w1 X: F
0 @0 ^. Z7 w I$ z. a3 i( t
4 y" F; c0 @* {& K: Q
没有加停用词,所以一些无用的词比较多- U. ~# K8 ^2 S) [* ^
6 M5 w- ~7 d- e: k( x9 c6 u7 s* b" a
Y/ n G) M, l, ` `$ ?0 Y
stopwords={'了', '啊'}
" x r1 s; y) n1
8 }% n# v- ~/ K$ ]3 R0 g- o5 ~把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。% z( L% E! `* v! i5 X& S% A
我们再来看下) Q3 S* U0 |0 y& D4 F' k9 ^1 P9 i
0 Z+ c$ M; M: s* @% V n8 [% R- N# H/ B4 s! I% g: A* D* Q E
不知名网友:666666 牛批 老哥我要学!!!
4 F# {! A( g# }" A8 y! }2 { l/ H# O, k! f% z- l8 W
9 y+ Q2 b/ n; ?6 b
* [* C$ T) x) t }9 {! A i
8 g3 W* R& g% R: x————————————————$ k( |9 Z- g$ U" I
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
" Z2 x0 |8 [; S8 S) a0 a原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
, y% L2 }7 R9 d6 s a
7 ^) l! u3 w0 y, S+ y" P) J: x0 x& U
|
zan
|