- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564709 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174636
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
# o/ V7 ~. w! M1 q5 U用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
5 k4 C6 h3 c5 a今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!5 ^7 Q( n: J0 Z( L* g- |
康康大家都怎么说!
# u/ Q$ J( D) _9 n8 A! _5 J9 [: s/ ^5 H1 P) P: T4 n' \
* V5 w. ~5 @6 O& ?3 X+ O1 j
; X6 I1 z6 Q# A* y& S/ \- G; T/ J; X8 }# K
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
; ~( m" M9 S# E: s0 H5 N& F& Z$ t6 @5 M o7 f! T3 m1 F+ f G) {
5 I$ b; `& j, h; U0 F3 ^' s- O
如何安装模块:
5 B( z- ~+ p; [ K4 M( ?
+ O ^6 r k1 ^+ L( B) v
6 K' J( y" ?" N( wwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
4 I$ m3 v( O- |& K# Npycharm里面安装 terminal 输入安装命令: pip install 模块名 回车9 p# u* {3 P" j2 R( Z
如果模块安装失败了,可能是这些问题:8 ^" \0 B. N& ^9 s! Q
" V6 ^2 w' e3 m% H/ O! ^1 ^- W; R% N& A2 _! i$ E% F" k
提示:pip 不是内部命令0 N" m2 |9 i: h) X
你python环境变量可能没有设置好4 y/ y: i! e+ f& @1 D- w
有安装进度条显示,但是安装到一半出现报错了9 |( n+ ?6 r) i, [& G6 n$ {
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB% _( o, I& G5 b0 f$ ~7 P( Z1 c
read time out 网络连接超时 你可以切换为国内的镜像源
# K) x) D- M- |) ], @! c明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
, O( F7 J% X& X8 a你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
: C. n1 U8 Q$ W, q8 v* A" k* @( J/ I可能安装了多个python版本+ [! }2 c1 H" f
安装一个版本即可
, V8 i- G& L! y+ t5 @) x: t. K: x; YPython做爬虫到底可以做些什么呢?* k' x* ]4 n$ R4 K* I+ I6 |3 ]
* Q) a# `7 _0 _8 m- y' d+ x& K, R; ]1 P; `+ _& Y' {+ O n2 d
常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…5 Y4 I9 L( s9 Z8 x! H
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量0 @6 Y% H9 A( a0 t
可以刷课 可以刷网课 自动 还能自动批量注册账号2 g/ k1 ~5 B7 ?' J
模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …' X& K u8 M' Q- T% A
普通B站视频可以爬 番剧是需要会员的/ h$ k$ ?% ?- m; @# t! E( v* C
) q% ], _5 d6 ^+ A1 V
5 d* H- @; p5 N0 \) Q: S# H
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载) C D |& f. L# s. L
( m) X$ B" ]4 C
' Y; Q% b1 a& K( \" G' i
1. 确定目标需求 (弹幕数据 那个视频弹幕)
9 B; X1 x" A* Y0 N0 m 确定了0 i, p# r! Z' i& y' [
2. 找数据 (数据的来源分析)
~6 Z# U$ j% J Z G9 h# C4 x0 h 简简单单 找到了
! h2 r+ w. i; b" l; e$ l% `5 y3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)4 Y. i# v. e% e {
请求方式: get / post% j6 `& @' e' Z) }
请求头: / F; @5 a. f* B5 K+ z6 l5 L2 ~' ~1 `
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196. T) B/ |1 L- G& a) Z
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)' d' {4 o/ a2 A; s# @
4. 获取数据 ! X+ R6 B1 ?1 k8 z) x* G% i4 F
文本数据 response.text 获取网页源代码+ y3 e, s" }) u- B; c9 B
json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多1 A3 U' v% e6 `( Z1 N
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 1 M: \ V8 |; e8 f w7 h
5. 解析数据- R j7 f( o4 S& s0 u B& T
正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
' i4 J4 m/ X. |+ A1 H6 f/ m6. 保存数据+ p. j- w- y ^* D3 K: @
12 n! z! K' v$ D9 E, b. q
2! Y5 `) [2 L) @3 Q
3
/ ]# V+ K3 x7 {5 I+ y, e4! x) U7 |9 W, U) R
5
, e4 Q: s+ X/ Z, [3 s. b6
( n- D' b* @7 _& y# k7
' a2 g, b- T# _) @. ~2 H2 X6 Q83 t/ x5 z% ?8 e) w. o# \6 }8 a
99 R- v2 Q: N) d# i
10" U- g, Q3 ?1 f% h0 ?" e
11
3 l$ I1 B( d: _: X9 |: f- b' B( R12
6 I$ Q4 B, P5 S3 e0 h+ [13% u w% }4 g3 y
14
2 e4 L* o' r& a A0 i4 O4 A154 ~; }4 a0 m" `! V7 u7 K+ ~
16
8 p2 F% K0 M l/ dpython除了做爬虫数据采集,还可以做什么?* i% _: o0 k0 C( e
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包), ^7 e; p, N6 o2 s6 S
4 }2 L6 H5 Y1 |& R; H! l- Z. D9 T$ e* E5 b2 y6 ]
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
5 h+ J3 ~& p! D0 w比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;7 P! n+ U5 m0 @, j0 ~( l6 w& Q+ f- w
我可以做到这样么?( n* [* h, d+ W
0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
7 k: A' v! Q3 J5 j" s; k如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;, K8 D" {3 R5 v# z% T3 R
) Y0 V5 ^9 x+ I$ h0 \0 P+ H
% R/ \' `, |! `0 I# n) P5 ^1 q' W爬虫开发(脚本)(就业/外包) 可见即可爬
3 y. _3 U8 Q, S9 O虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
3 I8 T3 K1 E9 K# u- x很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
2 N# h( S% }- p3 i i之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!6 V& R5 V4 i( d' K
, y! G% k5 }/ p1 M, L' z$ W( M
5 W- [4 J7 G* W1 s数据分析(就业/外包)
9 H0 R- {7 Q: t2 ~3 ~3 M( F( K
. K, T! ]. J, W3 g$ E; N$ z9 ^6 N" r1 O# A% X6 A1 o0 T8 r, H. f
自动化(脚本)4 l- p+ @' P* [( l( t+ P
, R2 ]) e% D+ c) G7 M
( p G/ q( q9 C: Z A) m游戏开发/辅助(脚本)' M& P" S m- N; b. v K) k3 L
4 f6 `* w! ]7 K1 e* c1 W, j
8 q# j0 q; D# }, C" O" e. e
人工智能(研究生以上学历 要求很高)& G/ r4 G$ y. ~
4 U% L* n- J* w. n; X1 F0 ?5 S# \
" n8 v' i/ |" M" P- \* v等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
K1 K, Y; `( _5 |- q% K
- B4 J2 d8 b8 J% N9 E( y7 c& i+ r1 ^4 C _" k
我们开始正题吧; e! T3 ?5 V. E0 v
) ^$ D9 ~' @! ~) K
& \+ @6 [, o' M0 h5 L爬虫部分:
9 B( y' m5 H$ r# d" |发送请求 第三方模块 需要pip install requests1 L5 \* j" k6 g! V ~/ c; R! H! F
3 @, X4 Q2 o7 c" u: s
$ k. n* ^, g' E! L5 T/ V0 p0 m0 |' J
import requests
# }$ M9 C. Q4 o7 M7 d4 Q$ Kimport re # 内置模块' |4 l( C+ ]6 d. u
# n" m9 D$ `! L) M) T$ \2 w- r. M8 `& }+ R0 v& z% j. S" l! u
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'4 C, s0 x. s+ d' B6 I( o" a
1
) a, F$ A& x+ b/ R/ Q/ I2' }& h- t. x6 p
3
' u+ y% [+ @; H1 Z( [" k4
9 \2 E/ l2 ]$ _5 d3 m' x请求头的作用就是伪装
9 k! f9 H2 J4 G0 e9 _( E( ?9 i
. [% a8 x, W/ G C$ Z9 a
! |1 O# }! y) e% q# gheaders = {
! ~0 d6 C" J- I) V& y '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'! \& {2 b$ N1 x
}0 b0 A. x6 ~5 @5 k# r* l2 ]$ u
1% ]. z$ u5 f+ L/ S l* e; X e
2
. Z# f H$ p2 w- k3% d' L! r5 K0 B
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
. A& U% a9 ?/ c- h函数传参
- t# M" {$ Y% l6 D# `1 j' ~! K- Q/ v4 g4 }2 z5 L/ F- j
4 {3 {) m# X r6 a; ~( Z9 W- Y
response = requests.get(url=url, headers=headers)" \: T5 ^( B6 ]" P2 r9 @/ Q
1
! d; h# a7 P! S4 I" @. r) D. E<> 对象 对象意味着你可以调用里面的方法或者属性3 H: f; v4 b. o4 ^3 {* A e4 A! n2 F
200 状态码 请求成功
+ ~- ]0 k- B) ~9 K( O获取数据 文本数据( M* ]6 f5 p. n: U) g
自动识别编码 D1 M( ` S3 {- I v) E/ D
. s. I9 |% P9 d0 G
7 M+ ^8 E+ Y3 Z' _/ H2 e2 ?response.encoding = response.apparent_encoding
4 s0 L- r' R0 S& J& P- nhtml_data = re.findall('<d p=".*?">(.*?)</d>', response.text)
- U5 J1 c; a$ n/ X$ F8 |8 b1
7 d$ S3 s! x& p4 @ F$ f, Z2
) ^! \0 Y( d2 S0 Ycontent_str = ‘\n’.join(html_data)
+ P3 k; \% v d$ S! D4 p) e- H1 Z5 Z$ Q
+ g& P7 x" l; _4 w% p/ f k& E4 W$ G% X7 O; u0 M# J
要列表转成字符串 ‘’.join()
- |% a7 s: A1 ~7 cfor 遍历* {8 Y, l% M$ V3 C' U
保存数据 保存字符串9 `: C# W2 W7 K, t" D/ c+ O$ \' V
for content in html_data:
: z$ Q) n q! Y' U/ l" O1 S # mode 保存方式 w 写入会覆盖 a 追加写入; b8 w1 A' H- B/ ^# [! \
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:; x X# m L) Y6 c+ @
f.write(content)- D" J0 g) C+ p7 e( Q
f.write('\n')- y1 t, Y: L; C: _% V
; I$ A$ u o- Z* D8 a6 Q- ^# q9 }5 M9 t# B* A: A0 S
# print(content_str)
+ m( D7 Q9 r1 R6 M$ s7 h3 d1
0 G, y: V9 x/ h* p/ G- g2
/ s8 i# R7 {/ C( _3
0 X( h U6 u. K4
1 J$ }+ t) c& C5
3 ]8 F4 {& q7 v# g* c* |% r6" ^- T( n5 L5 c0 h* p
7
$ {1 \/ y* @" u' _5 |" F0 S爬取结果8 s& d: L: I& ?6 Q' q2 H/ V& u5 c8 \7 @% V9 E
1 n( C6 `) a6 E" R* k/ Y
, T. h5 c5 d8 c% B0 S
/ z8 z# y9 d5 b
3 r8 s0 I& B8 m2 f; i然后我们再来实现制作词云图部分
/ v g. p$ d, H7 y
) e8 j$ _0 q/ g( @7 _- j: n( L% U# f' z# L! O3 U$ V: R. J- v5 k
首先要安装这两个模块( }, q$ E' X, s. u% H/ {
8 ?4 Z, D( M: v, ]
: F* b+ \( {2 c/ z8 J+ Eimport jieba
) A* D4 y& C; Q( kimport wordcloud9 C. s+ }4 J$ d' B- Y) |/ z
1# Y! j5 o- q# Q. b( x6 L6 E
2
* f+ Y) w9 H7 O+ V( W' b一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。
* [' a9 z: h9 f& m& {# `2 b, V5 N! G" {) B/ y+ [ s
+ N) U* `2 D2 x) {f = open('弹幕.txt', mode='r', encoding='utf-8')
: }. H& b! k/ I$ |text = f.read()
- s8 f* ~9 j& f6 n6 T8 ~txt_list = jieba.lcut(text)
- L+ E5 J' p8 N5 N# print(txt_list)7 b) M7 F" p2 L- B) Z5 R
1* s0 ?$ P: h( ~8 V* `1 |) J
2 z# U* O6 T4 e6 x2 N
34 X8 X0 S# @: B6 }4 ~
4
7 h) z' G) k: y, [" L- I {$ B列表整合成一个字符串4 r0 a' q0 k6 x3 b
( i4 t8 t( J6 \& T' ^- O; d
1 }" A# Z/ o! r, _ K, C. n1 |string = ' '.join(txt_list)' W/ w& c2 K/ b1 @
print(string)
" l% c9 `/ x5 Z& Y* i* V) s* bprint('---'*50)
7 R$ o H1 Q6 D! E7 \. gprint(str(txt_list))
3 ]8 G ^* ^0 O1 Y7 {. W _5 K1
1 F! K( V% d; J: D* _: d! W; @9 K2
5 a8 N% \* }* o4 S: Z2 }2 }7 B1 ]3. `3 D7 a6 I; _, b; I1 C4 V2 |( {: c- N
4) k4 ~8 J9 K% x0 G# Y- ^8 q( t3 D
词云图设置6 G' ~ L& k2 g7 |
4 [5 _/ c2 N7 Q' z6 p
" g6 a$ ]' r2 i/ e. W6 ~4 Swc = wordcloud.WordCloud(1 X7 M% A" u4 x, P
width=1000, # 图片的宽
5 h8 z1 b) E6 F5 \) y# Z2 z height=700, # 图片的高0 m4 N3 W- {; e* i: Z9 E
background_color='white', # 图片背景颜色5 P( O6 X/ m+ q2 T; M
font_path='msyh.ttc', # 词云字体9 q& d* D- Y) P$ J$ m; u2 J z& u
# mask=py, # 所使用的词云图片% f( h6 h' \+ E
scale=15,$ o1 T' C- G! U2 d
# stopwords={words}, # 停用词5 ]/ M6 E+ v7 |9 b' ?9 S
# contour_width=5,$ z; p( v1 t( o) Y9 l
# contour_color='red' # 轮廓颜色
9 J8 e8 b! O: [* b$ d% g* L)' O% R$ W. Y1 y/ [0 p7 J; V8 u
1
3 d0 u$ i; ]" L& Z$ ~; \" E1 c: Q2
8 e1 |3 N) n6 w6 I3) N- H. p. [7 T3 W K4 Y) L
4
/ P2 b& f, `# [! Y" I7 G5, ?5 G& H4 J% @0 J
6, A; ~, [. K( ?6 M& g
7
! \$ W! q' ?( W8/ l1 a7 n) d/ X+ j
99 w- k9 g3 B# J, o- y! _* M2 Y
10; [1 j! ^' C: i% A
11 G/ O& I* r$ n7 e
给词云输入文字- E; N/ V6 |5 l1 \) O# T
9 I1 r- Q' i: E7 N
! e1 m& n' ~. @3 Y; x# ?wc.generate(string)
, x$ a R+ z% W/ Y# R1
7 Y0 }1 i+ G: R% }2 Y词云图保存图片地址( o, {2 c: z9 m8 F' d. C
* ? t3 B6 m2 x3 P7 K% b1 ?5 |
' B, E% o6 r3 w* g2 p/ ?5 q
wc.to_file('output1.png') ?) b& I) P5 b# w, {
1
+ [" @# r! x- t3 G词云图的过程中有点慢,大家不要心急
/ w2 y5 k m ]7 q7 G
' ]/ i/ ~1 U. ?7 {% ]) L
1 K9 j; z/ q; y: u) Y X$ M这是最后的结果
" I1 m+ W/ U& p G( v4 j
& e+ @2 B0 y& P1 @" A, Q0 L+ P* P! P6 v
没有加停用词,所以一些无用的词比较多
! ~5 k7 Q; e$ k1 `( P
1 R& { r, M: x) t+ W; g, i C% T# x2 \7 y4 x" a. U
stopwords={'了', '啊'}1 G3 g. D2 s, b8 C
1
# _4 o4 ~! I& m% J4 Z$ F L3 c% v把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。
; F9 P. e# d9 O& ?我们再来看下" A0 D6 x- J7 o: u {
; k" V1 i# G8 c9 P9 \
/ _2 r- p4 T8 u不知名网友:666666 牛批 老哥我要学!!!
8 V/ l3 d, N$ |1 G: u& [% R. Y. q5 {6 ~/ I/ R. ?4 {# L: s: g3 d
" w. n$ ]) }) u" e
& o# c4 b% G# b# j" }# ^
w+ F5 U- X% ~# H7 k. W# |5 ?4 O————————————————
& q9 e5 p% e7 _- y* L" I版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
6 i: [0 Z* O% e* M3 Y原文链接:https://blog.csdn.net/ooowwq/article/details/119211907& J5 I* j$ I7 T
. P& y z7 P) A7 e1 E
$ [+ B: U: z7 p$ M! v6 \! W
|
zan
|