- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565642 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174915
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
python爬虫入门教程:爬取网页图片8 j" R- y6 A( }: H$ ?1 W6 B# f# f
" \) L$ S& {1 I W! E% m! }在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
& q& t* ^ c# Q N& c' o& ]0 b8 {* g. @1 V( K3 _
准备工作3 o1 R/ g; V L& o/ R, V
语言:python
+ I5 k) G6 j8 e0 \
4 h5 l0 R2 h5 Y" rIDE:pycharm$ B- |# y% \ B2 O) g+ l" V$ h$ N8 y
1 Z$ }2 i' [! k' V4 a1 q) s首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:7 K3 X3 T3 W! ~+ k/ v/ f- q3 I
1 W" w- Y% z! o9 l8 ?
import requests //用于请求网页
$ U Y+ r4 a, @, t+ q; G2 G: Wimport re //正则表达式,用于解析筛选网页中的信息+ {/ B7 J" Q; n* R* x4 ^
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。1 w3 q' C* o7 g
" ]: e/ L# X- A2 l8 v( v
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
) q A: j5 ?& t$ h; G. l4 g
* {' @0 H2 x, P! K$ ^# ^注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。0 {- ^( A; f9 F8 s
+ G7 I9 g' G$ v4 T9 }
7 J6 v1 D, x$ z" {! F
4 j0 B- F Y, L. t' G我们要做的就是通过爬虫把这些表情包下载到我们电脑里。* b- U$ S. Y/ G+ G1 l
: x* ?; s) S/ q! u: u5 X
编写爬虫程序
' J5 D6 L# l# Y$ z1 \$ X( s$ A; d首先肯定要通过python访问这个网站,代码如下:8 I( m4 l; ^* B! C" ?4 b
+ N( Z, k9 \7 O
headers = {
9 [, c8 r5 a0 q! Z 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'( O* R5 i4 M# }& K; G
}( N0 C# m' V6 @
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers) //请求网页% u6 v' O7 V% p
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
$ `. t4 }' W0 v) }; H" w
9 k' |# M# E4 r# w8 L' D; w9 w6 O/ P3 A: l7 j: N
' y( f* Z1 ?, c
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:8 ] p5 K7 Z, g) a- X: ?) R
, X Z$ l- v( a u9 M9 Z( Q; T1 }: I7 [
; }: ~% }3 F' |: D
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
1 z/ u X8 r1 U$ M( k. S( g& ]& F$ _$ z) r
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
4 \! C1 u5 t2 B 像这样。* P: Z4 t6 J) J# n8 X
4 E6 B/ X: Z2 T5 A8 k$ q然后就可以调用re库里的findall方法把相关内容爬下来了:9 ^" j S! F( y$ W
, h% i) l, r2 {! Dresult = re.findall(t, response.text)) r* C# J9 B! }* P: Y- V! q
返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
6 K9 ?7 n/ X* Z
1 H# H- |* a8 {7 H7 t程序代码
. Z' k1 Q" R& X' kimport requests
* e. L7 Y) C& x4 y8 B3 mimport re+ Z9 [5 [# L4 x+ k
import os
0 P7 O9 B3 L$ O( ], O- n# [0 K2 O" o' b, L8 m
image = '表情包'
; R. x9 `4 w+ D# Q6 E' Bif not os.path.exists(image):
( N& i+ D9 t2 p, Q os.mkdir(image)
0 @7 n9 u5 F+ Xheaders = {0 P/ n1 q9 v9 l1 t
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0', c3 g: P$ k, C* H5 U ~% t
}; S: n' Y5 P* F# ^5 }9 n7 m4 W* N
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers). X$ |% ^$ w" q+ z- I
response.encoding = 'GBK'
1 R7 i5 o& n4 L. d' Zresponse.encoding = 'utf-8'. z# F7 B& z- c( R% f
print(response.request.headers)8 H4 Z' D& V0 I. n" D' l8 f% W
print(response.status_code)% ?% _- @4 G7 P2 M9 ?! p! d1 M& c% \
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'/ @7 s9 f$ S6 u0 `: X, r
result = re.findall(t, response.text)
4 \+ {# ^! H9 pfor img in result:, g7 d7 k. Q. ?) F
print(img)% E: l# g7 h+ q
res = requests.get(img[0])
8 u1 a. w5 {4 b K print(res.status_code)
3 o' W0 D& M4 Z. F; m: ?) [ s = img[0].split('.')[-1] #截取图片后缀,得到表情包格式,如jpg ,gif$ T2 d6 D8 e% N2 Z5 B6 Z
with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
" ^/ i1 h7 {8 f5 d' L9 U/ e- h+ m file.write(res.content)0 ]( n6 U4 X2 S: Z J; K
最后结果就是这个样子:
8 I' N7 n9 r8 Y4 ]" A6 ?7 L
+ B0 d; Y- G/ t: D# X3 @1 I7 T5 a \) J$ k7 c2 Q
————————————————
. U7 w- O- Q& a0 M4 X* C+ P版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& W# Y, x3 r3 k. J0 q( h: m5 l# ?
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044 V$ a. o& R |# p
6 j, M; }1 F' }, I/ b8 z$ p2 B
5 R8 q5 i/ Z8 Q7 } |
zan
|