在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 557100 点 威望 12 点 阅读权限 255 积分 172503 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 18 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
& |' ~ @* l3 E3 `/ z7 Y- H 用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
1 b- J/ g0 A( D' a) u 今天带大家做点好玩的,把B站热门视频弹幕爬下来制作词云图!
6 S- H* h+ C" E u E 康康大家都怎么说!
; i0 a, ^4 l3 ]5 n v
+ Z5 i1 j2 B9 p# i5 J$ X( v& a. A B / T. L5 y& A @, q; m8 F' l
, m5 K+ E8 T+ V! i
( J$ L, h2 y/ _1 |. W: s6 K& u3 z+ i) @ 开始之前先给大家啰嗦几句,可能有些兄弟不会安装模块,我大概讲一下。
3 I- `. ?8 s' k/ ~2 b 0 f$ x& @: D- }+ I. B0 r" f4 r
) ]9 Z& b' ~5 n7 D3 A: m7 c# p 如何安装模块: 4 w% V0 S4 b3 m# [& p6 Y3 d0 |
3 Q& [) b" X# j' o' j 8 v* D/ w4 z% f* K& P* H; d* w
win(键盘左下角ctrl 和 Alt 中间那个键) + R 输入 cmd 输入安装命令: pip install 模块名 回车 2 o* S4 q5 _' ]3 q6 g
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车 8 _! O* I0 v7 o8 X
如果模块安装失败了,可能是这些问题:
- _; O8 W/ h4 w4 n7 C
. {$ c" D: }3 u" j5 z0 h* D - T' n. |! O0 i" M! r' o8 d" p
提示:pip 不是内部命令 9 m- i* W/ C, d4 ?
你python环境变量可能没有设置好
/ X# N1 h: U; s0 Z* l+ M$ n: i. W# F 有安装进度条显示,但是安装到一半出现报错了
Z3 C7 e& M7 G* O4 c! K$ K 因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大概只有 几KB
* A8 {; E; X* Y read time out 网络连接超时 你可以切换为国内的镜像源 9 l6 O. U6 w6 X
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块 3 y6 a9 ^3 W9 R: c
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下 . z+ b9 p: @% \7 S) V' N2 _
可能安装了多个python版本 3 M( h; }% D2 v! a1 j5 G- d8 s! A
安装一个版本即可
1 M) Y8 m7 H' A9 j5 N; l n Python做爬虫到底可以做些什么呢?
9 D0 y: }0 Z4 n M1 n& G / ^3 Q1 D$ y. G( |" u# v
! f; D9 h0 D( i& |' O 常规: 爬取网上的数据 / 我可以批量下载图片/文字/音频 视频…
# `# t' V% N* ^( O1 X/ z& e7 f 12306抢票 / 京东商城电商网站抢购脚本 / 朋友圈刷票 / 一些问卷调查自动填写… / 文章刷阅读量 / 音频 视频 播放量 t- k4 ]) ] R( ^# u
可以刷课 可以刷网课 自动 还能自动批量注册账号
! \, ]. K/ K: s( { 模拟点击 >>> 游戏辅助 >>> 修改游戏内存(单机) … : H, N$ C( Z y/ I. v y
普通B站视频可以爬 番剧是需要会员的 ( j) _, D2 C6 i" k5 ]/ Z0 ~
; ?2 w3 u: s' e. V ( I1 e4 [8 Y/ I' M( @0 ]
爬虫都是通过开发者工具进行抓包分析 查询数据来源 ( 静态页面 / 动态页面 ajax异步加载) / |- `0 E1 [ Q [2 J; i6 G4 Y
# _; R( h* c: E# t- Q$ A
8 b: x- r" H7 K 1. 确定目标需求 (弹幕数据 那个视频弹幕)
1 x0 K* p5 F7 Y0 ?. X 确定了
; y& k$ ~ s3 ^. s6 H/ d 2. 找数据 (数据的来源分析) - t: a- E: T2 W1 R8 g+ l6 E/ L
简简单单 找到了 o! v+ V% t4 D# V
3. 对于数据来源的url地址 发送请求 (请求方式 / 请求头)
: @5 e5 [* W2 X& | 请求方式: get / post 1 s3 ?9 A: A8 V- r
请求头:
# ^" }" s4 g9 [- [+ `' I9 s https://api.bilibili.com/x/v1/dm/list.so?oid=376200196
! H- A1 x) {6 O" Q! c9 O1 y7 w- M0 S (通过开发者工具去看一下数据的具体来源,是否是来自有这个网站) + R$ n1 K8 \: E
4. 获取数据
" [6 B2 y' X1 ?( x8 _ 文本数据 response.text 获取网页源代码
; x+ r7 U( f; w% N json字典数据 response.json() 通常一般情况是 动态网页 ajax异步加载 用的比较多 4 G" }7 @- H/ p7 c* B* s
二进制数据 response.content 保存图片 音频 视频 或者 特定格式文件
* E8 m% A d2 b1 N 5. 解析数据
1 Q; x( E2 p3 s: D9 ^9 W 正则表达式 .*? 解决一切 遇事不决 .*? 通配符 可以匹配任意字符 * ]' c( L- z* a# v
6. 保存数据
) \8 t+ f8 G7 A' P) ^/ @% a5 k 1 H+ s0 F' ]9 N) F7 `% Q
2 : S. S5 K t( U# {& N0 n t
3
. S p1 U, @" z/ Q' w 4 * V& v1 m& p+ x1 i: I
5
* c/ S* X) o4 L 6
q9 X' L4 E% @; w. O7 ?' J 7
6 y0 A9 m/ V4 N; j+ p$ L" C: N 8
9 p5 q' [6 d8 y 9 ; J( H) b% Q+ R( ~2 Z* k6 l1 E8 D
10 ; o" n( Z; v. X, B+ D
11
; s# D, V3 M4 S; ?9 d: C: z 12
" o" B# i$ y( L+ _$ [2 k5 e3 i" U 13
1 P Z% M5 L# n( h8 r' } 14 2 T; N7 x3 p$ I& J) [0 ?6 R9 [7 x
15
s; A, b, {& R9 l 16 2 Q7 `$ z3 D. [1 r, d+ [& c
python除了做爬虫数据采集,还可以做什么?
" t6 f) S! [4 U! m: S 兴趣学习 还是 通过python技术赚钱 (就业找工作 / 外包) 2 |* y# a2 ~/ y9 J+ [
( _9 X8 g& r7 U0 l0 S& U
6 v1 E6 b: [4 D( H 网站开发(就业/外包) >>> 我们课程是教授的全栈开发 薪资 13K-15K
+ k8 ~6 l, k7 a$ S8 L 比如: python开发网站: Youtobe / 豆瓣 / 知乎(以前版本) / Facebook / 美团 ;
0 R7 j; |( Q% |% ]; q5 [- W( N 我可以做到这样么?
* E# D3 t# q, U/ K/ o7 h! k! l 0基础 初学者 从零开始学习,上线 通过 域名 服务器 数据交互,4个左右的时间 就可以独立开发这个项目 类似知乎的网站;
8 r' s3 z' P7 ?) `6 c, p8 T 如果你做去外包(团队): python开发就业 大多数也是进入外包公司 一个 10-20K左右;
5 L5 {6 S D0 X$ Y! q( d $ ?/ |2 S4 M% q; @: s
; K; V2 n9 x- X/ W- N4 ?( f; J8 g
爬虫开发(脚本)(就业/外包) 可见即可爬
) X# [; T+ u$ o: _# g 虽然爬虫什么都可以爬,但是获取用户的个人隐私(信息 电话 身份 贩卖 )、国家信息、商业机密(未公开数据,或侵犯版权)、色情等违法信息用来盈利,就基本上人无了! 2 ^$ ^; i) t7 C% j
很多兄弟问我,可以帮我淘宝用户数据吗? 我都是告诉他们,这个我还想多活几年,这玩意涉及隐私,个人信息,你可以自己学了悄悄爬,爬完记得删了,用来实践问题不大,但是别用来盈利!!! 7 L/ c: h$ j2 M/ S1 p) ` A5 d
之前有个兄弟爬取微博上面军事武器航母图片买给国外, 然后就进去了!所以奉劝大家,切记切记,别乱来!
1 C8 S! Q0 C2 n9 x 9 J5 j! z; y. j. I8 s
0 U+ q5 p; s- h/ r 数据分析(就业/外包)
. R! v/ b4 m# f: V6 ]/ O- e, M - p% l+ J) F8 X7 q8 {
6 B! V" M7 _; h; p/ L' W2 d
自动化(脚本) - c- w, N7 M# \( I
% h! S6 R& N1 v# u
Q, Y G6 |+ g8 u 游戏开发/辅助(脚本) : K" `' q' Y( W/ D( w
0 s! W: _+ s- f0 p2 z& f2 C
2 Z" e! l( `+ t9 M( _
人工智能(研究生以上学历 要求很高) 2 G3 q5 U/ F0 Q1 ]
$ ^6 ?) n2 g y s) M+ g 5 e* U3 K' C* Z' |
等等方向还有很多,我就不一 一述说了,那些方向对于一般人来说作用不大。
( b0 W* }- x0 T4 Q1 o # ?' v# @* ]# C9 x/ {- n
, H& ]/ ]: C+ d' K2 p- x( o3 U 我们开始正题吧 / k1 g$ P) h+ J- K
% E+ S+ U, k3 n( D/ |6 X O& [2 i" ^8 V5 K+ A1 Y9 m
爬虫部分: " N! i" N: W/ v0 K
发送请求 第三方模块 需要pip install requests : d: v* m. K* v) _6 `- i( E/ Q
) K6 a6 u& w9 E; {8 g7 w
! p6 D) c( {& f% b( e
import requests
7 O: j& Z/ T& i1 G import re # 内置模块
( r* ^' C! s2 q
/ [* I) _* C- r7 X! n
p( C8 ~: W0 x( D3 E( F" f: A url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=376200196' & m# k1 B2 g0 W
1
9 ^: S. \' O& \! l0 Q P) Q. d4 ?: y 2 9 Y8 D' n* J- F& R/ w: f' a4 I
3
5 |! R+ w9 h% o5 n 4
3 U7 @2 ~$ u9 ?) Q) _( |" O 请求头的作用就是伪装 / @/ B! t: v/ u/ K
# K( q; B) x7 b) D8 E) f4 t; A
: U/ T8 H+ Y A3 h& J headers = { + _0 n9 U7 u3 }& L5 A% Z/ {! @" z
'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'
+ M2 _: R2 s1 ]# k$ i" j }
/ J. n; Z( J$ d# ?6 H& |% ] 1
; z. M0 W# o" f: o8 i, s5 w 2
6 ~' ?- t" M. p5 N; {' r1 |7 C 3 0 p6 b# U2 b; T
模拟浏览器对服务器发送请求, 服务器接收到请求之后,确定你没问题 然后会给你返回 response响应体数据
6 D3 w4 I% z/ [ e+ @' B0 M6 Z i+ ` 函数传参
- a$ G, x0 Y1 ]' `" p. N ( r6 R* ?1 S L6 x1 Z" g7 r# E
: V+ R+ {7 Z% F! H& P response = requests.get(url=url, headers=headers) ) R& [0 Y+ K! L2 f& ^: p3 u5 }; q7 T5 b
1 . y" l/ w- M/ N: |& f
<> 对象 对象意味着你可以调用里面的方法或者属性 % N' l6 w5 [- p8 K7 Q4 E
200 状态码 请求成功 6 Q2 \' d% p8 u; H; i
获取数据 文本数据
) l1 { ~& L3 l* N 自动识别编码
0 J2 y9 ^* f& I* C$ ]1 w* s 7 i& J" t! J2 _% d
% U) h( x% @. P) q* D6 i
response.encoding = response.apparent_encoding
; L; O- u' ~* _8 T5 T html_data = re.findall('<d p=".*?">(.*?)</d>', response.text) " D- G! D h) |8 u2 S& X, F+ \7 R
1 0 r9 o- z! F- t6 c: e& d) x/ ~
2
) _$ H5 Q2 x. E content_str = ‘\n’.join(html_data) , |* f. }3 k! o( T3 C
% U1 o5 r) g* E9 T " P9 J7 r3 T4 v! T
要列表转成字符串 ‘’.join() : ]8 d; ~* J- E. Y
for 遍历 6 N( G; c7 D9 G* M1 {
保存数据 保存字符串
6 q7 ]5 k) K* L for content in html_data:
0 k8 z4 J8 P% I6 T9 G # mode 保存方式 w 写入会覆盖 a 追加写入 0 S% |. S8 L$ M2 D+ g
with open('弹幕1.txt', mode='a', encoding='utf-8') as f:
3 c8 b' c) T" \0 `0 i f.write(content) # }7 J# d4 z0 p5 D) I, l4 b
f.write('\n') 4 r) Z- d3 N# |3 ?$ e- R2 {, ^, m
0 Y7 K6 \) x2 I1 O
8 K( M* Z" `0 t6 W2 c" X4 N # print(content_str)
) p& O; B( u) X8 q1 O' B& r 1
3 B; v F9 \9 i3 j g 2
* |; p* C, ~/ j0 G6 V* ` 3 - m3 u' f: g8 V
4
& D8 V8 u6 @; t2 [+ c* W$ v8 F* l+ u 5
|. U9 {* ~, S S" u9 y( G9 S 6
j4 F( N- Z* g: D$ f 7
; x4 O4 z2 ~ r% _ 爬取结果 * T9 A4 D5 x& K* m& z7 Q
5 o/ S! r0 @' B! j
- ~6 n% Q; z/ U5 z) r 2 ~7 Z+ | |8 _ j' w
3 g- f$ |* U5 Y8 { 然后我们再来实现制作词云图部分 1 G+ v# g1 m9 B0 Z2 k' v
# B9 }) Y+ e u9 |
' x1 k* j$ f7 \4 d" } 首先要安装这两个模块
8 U0 \& u, c$ X, J * E: e n$ F9 j# W1 ~/ G4 n
6 P2 x0 x8 m0 o- H
import jieba / [& N5 i* D z1 G; P
import wordcloud
9 e4 t, i2 @& w* @. p& A) l1 ^ 1
2 W' K6 M& J" T2 A- L 2
/ h5 F( O$ @, a8 k+ @. ^ 一个相对路径 一个绝对路径,保存好的txt文本名字要注意看一下,不对的话,记得改一下保持一致。 % `( i# x$ c+ p" Y3 h$ |
?+ b! {& j. U7 p9 G" P# }9 }
" t6 j. t7 P6 \; V+ E1 n% G5 A0 o f = open('弹幕.txt', mode='r', encoding='utf-8') ) v" f+ n& I. [; `$ F
text = f.read()
. r# v( I6 E1 f1 z2 Q; q0 a txt_list = jieba.lcut(text) ! Q% ~7 Q2 e( W9 S& w: {2 I
# print(txt_list)
5 e, d4 d, l( f( t/ Z; S 1 4 k: U4 R, r2 o3 j6 R
2
7 A: l A* q+ L# F 3 5 |& E+ o6 z. }! Q2 l5 c, h
4
1 X; |( k0 v4 M0 P# L; r 列表整合成一个字符串 7 G1 F" T$ j+ }" Q; u
5 J$ M: Z2 q! s
4 A7 e- {, c, s1 r$ ?2 b
string = ' '.join(txt_list)
- G4 ]/ Q0 [$ P4 o0 d' V7 m+ u0 u print(string) 2 I" l0 v0 ], a" v1 F( g& X
print('---'*50) ! I( i1 V; g. W3 E \5 I8 \0 M) T/ ^9 {4 X
print(str(txt_list)) * b2 u) ]$ J7 f; \( u
1 * E; S. k, I: n: O& f
2 ; V1 ~9 U& u; s( ~1 ]+ K
3
) A! ~3 H0 P, ~ 4 " `) W3 C# Q+ [, r) o
词云图设置 % q& r# o m( `# l6 Z% N
0 s( k6 X0 i; k% i. t+ P3 x
! y( V0 z) Q0 A" o) t. z( L* @ wc = wordcloud.WordCloud(
! O4 S' W/ @& B, C0 w e& |% r+ P, q width=1000, # 图片的宽
8 N, b' G7 G9 _1 \: g height=700, # 图片的高 # R$ H9 l! R& S+ f/ I
background_color='white', # 图片背景颜色 1 _( S; T: v9 Y% j/ c1 `3 ~! U$ Y/ i
font_path='msyh.ttc', # 词云字体 : {& ~; j' |' }) q& w/ O* m
# mask=py, # 所使用的词云图片
) i+ ^' y `4 _0 y' O0 t scale=15, ( ?; F. M1 w; c0 F
# stopwords={words}, # 停用词
D5 E' ~' ^. X9 e9 D. A" U0 d # contour_width=5, V5 O( S, z, F0 e. Q
# contour_color='red' # 轮廓颜色
$ e; G$ c+ Y, k2 R1 `: S0 x ) ' P# i9 j1 G) {2 W4 d
1 + }8 w( Q- _. y* Q' j8 n( O
2 " ^3 ?3 L" A& ] T
3
1 Q. x, Z' {5 E1 G 4 + P! {$ W) f/ h @' K
5 $ W; k) n1 }8 K# K# p& Y6 ^9 |
6 ! |' Z d1 O8 f' ? H: T
7
0 M( g( B$ H: H5 R1 q 8 # ~" }6 R8 ]; }% E
9
" C5 c1 ~* z, c4 @+ S 10 ( s4 R5 e; U8 c0 w! J
11
2 T/ g P9 t F* Q 给词云输入文字 # A7 T, ~" P/ ]$ j
; J5 T8 \& I. m% K9 [1 k8 {( X5 v
7 e2 h, M# k- O+ j4 S. V7 u wc.generate(string) . u Q* l; X! X
1
, b6 L1 j6 ~7 v5 P' k 词云图保存图片地址
" F$ l1 P% X! c5 S9 A
% w0 i; ]$ w! j n3 N7 f1 U7 M 1 [. c' m* @3 Y# i- n
wc.to_file('output1.png') J J+ C N; G. y; J
1 ) C+ O0 J$ J9 F2 O0 @1 r
词云图的过程中有点慢,大家不要心急
, y) ?* u" \. J C) { 0 r/ ]4 @2 ~4 {8 O9 b) ^9 j
- _; d6 ~- l) H- F. {8 G/ v/ b* k 这是最后的结果
1 b( b* a0 g# [7 h+ E - G$ U. K7 J* J6 I
# R7 M! [1 s* P: B6 A 没有加停用词,所以一些无用的词比较多 ( E# \, I- G% R9 v# d! y
# C5 J( L, V% A7 \7 t . r, E' h3 u% a& G
stopwords={'了', '啊'} # U2 Y# T4 R0 X( B$ H2 ]/ j3 V9 B5 o
1 0 s1 H9 d5 M4 B. ?8 U
把这个部分的代码加入要屏蔽的词就OK了!比如我现在把 了 跟 啊 这两个字屏蔽了。 ' H/ j$ \( g2 c; ]. e
我们再来看下
: z4 `9 b+ ~) q* d' k, ?; ^' u
4 f- J, q9 x( K0 k. i5 u- E ! m9 C! X4 J1 x& w! O" o/ x7 l! b
不知名网友:666666 牛批 老哥我要学!!! - v4 }! \5 V& F3 X6 z2 ~
, X, ^( \% y: \! x
$ q8 }/ ?5 [/ @' c7 O- W+ e 9 U: L; ?! Y1 _7 Q; l
" a" R( W- p$ k
———————————————— 9 f$ q i* S6 e( c4 T _* K
版权声明:本文为CSDN博主「编程界的泥石流」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 3 O' A u9 e; u3 O& v
原文链接:https://blog.csdn.net/ooowwq/article/details/119211907 " x2 ^3 c# V+ `' x# z7 U
& g1 y9 B, i" Z4 D" z( F3 O
* v1 [4 g8 s m0 ]
zan