- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 555860 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172131
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ f9 T) R9 u6 q% u用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!5 h% u9 B+ v8 d" r* n+ l
今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!( ?" o. U+ w% ? e
康康大家都怎么说!: j, w; ^% u: l" a8 }. ` g; ^
: ^$ T0 [7 x) t* {
; W" c; E1 E7 f% k( f5 @! d2 X" B F; m6 {1 Q
?1 {4 F7 s7 }$ i7 U$ {' A* t: a
开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
4 C# g, u& n D' N, i4 G0 V% I2 X
% _; Z! `4 |6 z5 W# v, }/ u! o7 h2 A0 A/ y+ J% O" g; y) V; `2 D8 b
如何安装模块:
1 r) q1 y) r. M0 i' f. Q6 q
7 o9 V* u( `* e- E( b. w
. T& e: Z$ |. @: P9 j0 vwin(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车
& q$ X- n9 _) L: |5 i, \$ s2 fpycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
0 R- z, s( E- S' \3 J: y7 P+ ]+ _" _ E如果模块安装失败了,可能是这些问题:
7 f4 P* E7 d' S( R9 }5 Q& J" B3 G, b; Y) Z) Q, j8 b) o' U/ |9 ?- ?
l" x* C8 i5 K' [" g
提示:pip 不是内部命令" t5 _: D1 \) L' C4 \5 y
你python环境变量可能没有设置好+ A% E8 }: w5 T8 M$ N, u { X
有安装进度条显示,但是安装到一半出现报错了
' s7 J$ r' B M* k; |因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
! U( X- T9 z h6 y8 Wread time out 网络连接超时 你可以切换为国内的镜像源) ~* k* g$ A+ x: P- o
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块+ ?4 F' R# m4 s. _
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下/ @7 F- Z* R4 J8 ~6 y
可能安装了多个python版本
5 F' ?! z7 ~) \2 h安装一个版本即可
0 L6 o }0 p0 Y. S, e" C0 [Python做爬虫到底可以做些什么呢?
2 E+ q% ^7 a5 D% S7 A0 _4 A5 X- C( z2 C
# G6 J! Z0 C- W! `( x! H常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…1 X! Q4 ^1 K9 F! R
12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量
7 r, c$ e; ?7 b可以刷课 可以刷网课 自动 还能自动批量注册账号
1 E- }" I0 @" T, E9 }模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) …
5 U& J9 ^4 Z2 |, F' l, }2 z普通B站视频可以爬 番剧是需要会员的- C. O/ A2 c. \& m) K& H1 ^
5 R) D0 k3 D, o( a1 [* ^3 C2 z9 W& N+ ~7 k+ p- ~8 `
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载)
$ t% Q9 D- E3 p% F0 z# s w2 q- }: Y. u/ }4 u/ O* y
9 _& U4 ^" R& @8 T# _
1. 确定目标需求 (弹幕数据 那个视频弹幕)
$ C) n3 T7 ^( N9 H8 X' A 确定了
Z% k9 o& T* `7 E4 q" t. ^+ e2. 找数据 (数据的来源分析)- q" J( ]* m5 Q6 t
简简单单 找到了
& r% ~: k. Y U3 n+ y3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头): I" o5 B i& S
请求方式: get / post
/ Z3 ?0 k) L: K! y 请求头: . e) g. G" z0 j T1 A
https://api.bilibili.com/x/v1/dm/list.so?oid=376200196& Q: M. `# W4 n2 i3 N( R
(通过开发者工具去看一下数据的具体来源,是否是来自有这个网站)6 v$ u0 V$ t3 t8 I0 N$ X5 e& u4 z
4. 获取数据
, C1 O# F$ g2 s+ E* Q1 Z5 D ` 文本数据 response.text 获取网页源代码
' r8 x, Q/ |9 k: b' n7 K+ } json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多
' } X8 n9 `$ b5 G: r0 ~3 u: q5 V 二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件 8 @: X4 F q; q4 U4 ]: m
5. 解析数据
3 C; }5 U( q+ M4 H t) K0 |+ r 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符
! W% ~, c+ z7 _9 }8 O! c8 c6. 保存数据
6 w7 N9 U0 X( Y! z2 O# y1 ^- D, t1
! T) F |2 F6 e/ l( i2/ b; @( e3 k n) h" T
3) n" H% t* ?7 G' Q
4* r6 U$ _5 X6 K1 x" O
5
2 L$ T9 f& m1 k9 ?& Y& J8 d" [2 u6
- j6 n' x( s/ Y2 W7! ^& {) N, {4 d2 U
8, Z" A& [6 N A2 v* [
9
3 m; w7 w; a2 |) R" p10
8 Q9 E! `) ~: t, X11
3 u3 F+ u0 T9 |0 V* ^12
6 O. P( I) a0 V6 V3 y137 L2 v8 T, w: m7 V S* F" r
14
- U, z) X# ~# q7 d15
8 I% k+ m% X9 G6 J4 D164 j, Z d6 W! H% G l& C" e
python除了做爬虫数据采集,还可以做什么?8 N7 ]# B: X- u# u# I8 V
兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包)
& q# g# O. m* Z) q# e6 x9 R- Y* u4 S2 I6 |; G
) K+ `1 B6 X6 ~3 K: Q
网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
& K" l; h( f5 ~8 i, ~+ g3 q比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
; _6 @+ R% O3 n8 R我可以做到这样么?
7 S/ N% w Y# n' b0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;) \$ D* h G5 t- d! P
如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
* W; }. h: F5 e2 B
- H; o) U3 L9 Q2 w
$ g/ ?: {2 ]6 E, f' e& M爬虫开发(脚本)(就业/外包) 可见即可爬; B( K" S5 T- A* V% T$ X& ]
虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了!
/ g4 {! Q) J: K" a5 X6 z很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!!
+ S5 E! z' j* u6 r- Q7 Z之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!3 }5 |# j. a/ d7 G* R
, D" A0 V& O$ l) U; o6 k& J
. O, s5 c) O1 K" q: G. t数据分析(就业/外包)
" d2 j# q( E, B
' x6 @6 i7 R v# W* v1 `/ d
; @3 m2 K* Q d自动化(脚本)
' T: F j! o6 i+ n9 r( u/ J
7 j6 |' P9 s- V8 o0 c
0 t1 D" l3 t0 v- u6 x游戏开发/辅助(脚本)
1 c9 C7 `: I" {- |
: D# m' t6 l9 u: k; p) Z
- s% s& B' H1 a8 M* S3 Z人工智能(研究生以上学历 要求很高)8 U* ?. ~) Y2 Y
" z1 }9 v1 p {: i7 P
$ ]% E6 i; X4 L1 s0 ~% O等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。+ b. [ k6 d8 E! W+ |/ x
: i6 S1 k1 r/ s0 u0 b) a( M) m4 K6 _" {; A7 e6 ^- P _5 I
我们开始正题吧
3 r0 ?% V# W8 M& D) }
) B$ H) q9 w; Z0 V! I, |* H0 j) P, o# h$ m% q
爬虫部分:8 L( O1 q+ f- J8 r
发送请求 第三方模块 需要pip install requests
" P' I: m6 v/ D4 D/ H8 k( C' Y' a$ } w* R) y C
8 s4 ~- r7 r8 Fimport requests
$ b. X# Z, ?* T; X7 k- K3 [import re # 内置模块7 P$ e# _- y) n5 |6 P! f
" f- P# i1 c$ ?& O: q
1 B: y1 c( D- |: f+ B; Iurl = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196'7 p$ k# q2 e9 C3 E
1( j4 Z* t5 [0 s) p# R+ U6 e
22 g/ R2 i! R6 t8 Y/ h6 }
3
' c) y% L) q) C8 Z- p( m& x4
2 t3 g$ e* G" i! N请求头的作用就是伪装
: E' g7 b9 y9 m7 M y7 G, D
; V$ ]! S9 o e
1 ^9 v) v, b. _% C1 X5 |: l4 }, H! v8 Xheaders = {) ], x8 ^' g/ [) t0 M4 L! 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'4 P. G; t. `1 G+ l" z& [
}
" P2 c5 x% }- |4 J1
w4 J( j. h8 v5 l: X$ { S# Z0 v2; q: ?. R$ a; V! A
3
+ _5 C$ W3 C) T9 H9 t1 ^模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
( R% \1 c# @3 T, Y4 S函数传参# F) q7 Y5 Y8 ^( x( J3 u8 p
% ?/ {$ @- w1 [( Q7 \% n# [5 b0 R7 Z& _2 ?! u5 c
response = requests.get(url=url, headers=headers)4 ~0 e2 \" X! n
1
- f0 d. x2 U: p* M1 d<> 对象 对象意味着你可以调用里面的方法或者属性! l! e1 m% f6 P- x! l6 Y
200 状态码 请求成功
* I" X. T. S: |/ D3 E1 Q2 ^7 Z1 K获取数据 文本数据
/ C& g" K; l4 l自动识别编码
' E% L& {# h& N% N) b+ [& s, B) A
& u! ], b! v" h% x9 t: H9 x% t; ~! e- h
response.encoding = response.apparent_encoding9 P7 {0 s+ ~1 u1 h& k" i, a9 x
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)8 a. B& d- R" r0 Q4 G# P3 |
1
4 q8 G: d X' {; T28 n& N) X( R; A9 F0 S& P/ z5 H
content_str = ‘\n’.join(html_data)% K9 G! O6 j$ l) Z8 x# t8 {/ ^
# s2 d( s" `9 Z) e
/ Y: P& ?1 @+ r要列表转成字符串 ‘’.join()
8 U1 T* _: H' L: q" x! [6 D4 sfor 遍历
2 ~5 v6 R7 a2 [% C保存数据 保存字符串
6 M0 _" X; ^% `. ]% [for content in html_data:0 `* B+ u1 p( }3 a' k- h# R8 R
# mode 保存方式 w 写入会覆盖 a 追加写入
# l' Z9 ~8 k, B: w% K) O with open('弹幕1.txt', mode='a', encoding='utf-8') as f:4 N$ Q+ l f7 b4 S1 o' ^' I7 p. K
f.write(content)
/ }1 q9 z& |. P6 E* I' ?3 @ f.write('\n')
" g7 d( E$ t- s% [6 M+ t9 l" _( ?
9 U6 n- ~1 _: ^- O- v9 n5 Q" H+ r) B1 j) D. ^! M7 D
# print(content_str)
1 W+ r0 g5 D% S4 a; g7 Q13 s8 S9 V+ b, f4 {
2
" D2 T* p y6 l: `/ V+ k% j- B3
) K1 j4 C' T8 x7 w4
. q7 c; G m+ {6 n- m1 [) l9 f5: h8 {3 r: x9 J
6
$ U; G( _8 ?' ^# L7
0 X3 f+ F1 ]6 ^9 b爬取结果) h7 _2 S* E/ o0 X
) ]# {/ q, n2 ^. p: M0 V
* M3 N. ~' w3 M9 L7 i" ]7 n
4 G9 T1 i% |. Q2 M0 ?, n" @
3 o, q2 Q- m2 z然后我们再来实现制作词云图部分
4 ^# a D4 t L3 d( R
9 T# s+ a& {4 ]# n
0 t5 J% z* u" ?; I$ x首先要安装这两个模块
, ~) Y5 l s$ h% W) Q5 T5 D+ r" ]3 q
- N- V- i$ i& L: K- j$ H+ r
import jieba6 H* `( y1 q6 l. M( c( }0 s9 S8 C
import wordcloud/ z8 m6 v8 z2 b7 O3 g
1
8 M* a2 E" ~+ k! A; K7 F' i2
6 [9 e6 S" U2 C7 `# [一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。 N9 Y$ B9 @8 K0 |
% }1 ^$ s% M4 j; w9 R
# n* K' I* d( e1 R$ t* J
f = open('弹幕.txt', mode='r', encoding='utf-8')9 f! T/ d# l$ ~* y$ K) {
text = f.read()% B$ P- V$ p/ K; s l) h x# p
txt_list = jieba.lcut(text)
' O6 P0 A4 Y: M+ w# print(txt_list)7 I! _4 x$ o: k* v
1
" O# G( `* P |) c p8 W% r- ?' N2
+ L! }; b. T1 Z9 r: Z' F; v39 x) c' u$ V) u8 ]7 ]. Y, `; v
4
& G$ S* V* Y: c% f' v, I列表整合成一个字符串5 J h5 B* w) r9 J
6 D7 H4 Z! e9 b' O' U0 [$ h
- D u S! F- i v5 F ^. }7 [string = ' '.join(txt_list)$ S: U# R0 p" I/ y
print(string)6 e, Z J+ ?8 I6 X& Q1 z
print('---'*50)
3 V& `) }; Y' |7 W2 |6 [6 sprint(str(txt_list))
4 U9 i+ d/ `" h% @1" ]- t7 n, T& E, y
2" ]7 M3 Y9 M. g' ], h8 W q
32 B$ L; S3 [0 ~9 D& _5 [( w) u
4% Z; C: h& ~5 p+ h; Y9 d6 o
词云图设置
, ]0 P0 j4 s7 k7 G" o k$ w: O3 O! ~6 H1 V. p2 R
& R" A& N/ k5 @" ~% ~0 G
wc = wordcloud.WordCloud($ W! b, l9 ~% c' J
width=1000, # 图片的宽2 {* f! u- P+ Y+ Q# l
height=700, # 图片的高
* f L9 O# ^* D background_color='white', # 图片背景颜色1 o8 p* f, L) c& n) I
font_path='msyh.ttc', # 词云字体; j' P7 F- `% {- E( Y3 g3 F
# mask=py, # 所使用的词云图片
# K4 r( E% P* s4 r% v scale=15,$ E5 g b1 n; Y8 J5 F/ ]- F
# stopwords={words}, # 停用词
9 ~- ^8 ?: e0 d3 ^. W$ z9 R* }* U # contour_width=5,
& k9 U& N6 O6 `6 _3 [9 D1 a # contour_color='red' # 轮廓颜色& N9 O" p5 X( }/ \" ^! [
)
: ~1 Y4 J8 G9 j" b$ o( z) ]0 A1
( z# y) a7 H6 v0 A$ ]1 V( f% F2 V2 W2
" Z* b8 d, {9 M) h; ]( F3) T# I. X4 e! E+ c1 K4 N
4) b* \! l( e4 `, Z4 C9 E
5! d! N' B. Q* k- q7 K/ X
6
( M8 p j9 }3 T7
) m7 ]& G0 x. }/ H4 F$ t- W' Q8+ {4 R3 H1 A+ S3 c1 A% f( a
92 W6 \$ L4 A0 f2 f$ u1 ^2 k s
10
6 \8 q* q+ ]6 t$ E113 }* d4 u/ i3 T! f6 g
给词云输入文字3 O/ a0 [, J7 F9 w. \" `9 S
, ~! d6 ]6 u# L5 A8 {
. E0 u/ @2 k: p3 d- R e# ]wc.generate(string)# j; s& ] {- z8 h# _- U4 X: `8 g: D
1) V9 s/ C$ B4 S6 H3 I2 ]
词云图保存图片地址/ B C: e$ K/ J" U& _
5 r# o$ ^: P$ N. L2 y
' X- ], M1 q7 C0 cwc.to_file('output1.png')
; q# _" m0 q- \6 ^: i- L1 n- g N" F$ t
词云图的过程中有点慢,大家不要心急
: R6 K, Z6 j4 F) l! l
5 h. @9 F. b: a/ A8 P3 f7 G6 {- |- A1 f: }1 E" u
这是最后的结果
; G+ j. [# h; D0 H" }9 d+ ^! _' J: F: F4 R
a- u, ?+ D5 P) T( P$ i- j, [
没有加停用词,所以一些无用的词比较多
# o3 O7 r( q( A9 v+ F6 o% N/ {6 Z, X
4 X9 t! w, ^- A- \ S$ t( z
# M' D0 M) a% {( t" ]7 Xstopwords={'了', '啊'}, v9 }4 _6 g' x! T
10 F+ z' z5 T% P0 r' y
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。8 @ N; z! S% ]" p/ S
我们再来看下$ @$ \: k( r- T O: w0 Y+ e" E% |3 {
7 | f* T0 ^; s$ R4 M
g7 \' F7 s$ Y p7 i& U) R7 F
不知名网友:666666 牛批 老哥我要学!!!* h: S8 ]$ X2 I3 C2 V5 ~% m9 @9 X1 g
0 r0 n+ g! [+ W( ?, Z4 ?$ c9 z; q6 V3 @8 {2 ~* |6 [! R
5 X9 f& H* ?9 `) c7 S
) c( h, Y/ k9 }* b% p4 J————————————————, ~( C7 K, ]4 u6 h* [
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 M* h: R v; M1 D' N m
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907
; ]3 }! N8 P4 a7 P, `, ~$ \
- X4 W( Q" a, B5 E N1 f6 ` y; B" o1 o; v7 A
|
zan
|