- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563356 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174230
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
python爬虫入门教程:爬取网页图片/ J; C" R3 P2 T1 F0 O7 L) c/ F
. u" U3 r# A! n9 s3 d
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:5 A& t' n' l3 Z* }
5 \8 H: t1 @$ q+ z/ A$ b9 {
准备工作
~. r6 V q5 s. P2 }$ }8 O4 n; f8 N语言:python
* U6 x0 }9 D0 u/ t9 w' D% k$ l+ W/ ? C+ w
IDE:pycharm" T5 s' \, K2 S5 ]. m: z
& }) ~. q# n7 a9 Y6 f- E
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:/ g! T9 _0 C3 F# v
3 b: S# {7 \2 Y3 E! Z0 X: \
import requests //用于请求网页
X( O- J9 p* A4 s# a8 T: uimport re //正则表达式,用于解析筛选网页中的信息
$ Z. {/ C) \3 E其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
# t1 \8 \) N/ c; ], {3 W
, n. E& P' E Q4 R* D. C然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
e* r4 u( _$ o" c8 h) Y. J+ R) \* b2 i4 a( H3 K8 Z
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
! Y; `+ V! A! \( x+ Q' }$ J
/ {. X) M+ |4 I. M, `* a$ R: ~# T2 N" ^! x* W0 x- Z; K# L1 x* i
' Q' X; z* O& X$ a我们要做的就是通过爬虫把这些表情包下载到我们电脑里。$ q2 H% G" r5 h
- T/ K- T6 C4 P2 q编写爬虫程序
" x% ?+ l4 C' |0 X8 y首先肯定要通过python访问这个网站,代码如下:& H+ u9 Y, S8 r) ]: v9 H( D
3 e$ J5 {. _/ h: E9 C6 mheaders = {
$ k- J, v9 t+ g* ~4 J% i7 G( N 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'9 \7 }. O3 O& H9 F) \( \5 T
}4 k a3 X% ]4 H- U& @
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers) //请求网页/ j) z# I4 j, [3 m, S+ F5 b" N; ]7 h
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。; S. w$ R; [# V9 W
% |9 Z7 v/ S8 s4 B& M( n* ]3 j
8 |1 X* o' Z4 u b7 y+ e/ t* O6 S" J x. b0 d6 M
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
) z/ s- S+ ?4 k( B
! A* f/ R8 z* z" o; P7 E- Q
1 A ?9 [ S' ~7 F8 O7 N4 r8 w; ~3 \; g/ |; t: ~' C
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
, j t" @% H* [0 `7 h* S
; j0 ~2 v" K" C( ~t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'7 J* l7 m9 T" k, R" ]! r
像这样。
t! C4 W. t1 F. O& N3 z. _" S A- u" u, l- s! P
然后就可以调用re库里的findall方法把相关内容爬下来了:2 H% R4 E! a" e5 q/ Z' C
. m, T$ Z$ @/ G2 w$ sresult = re.findall(t, response.text)
7 g0 N3 r% k0 |7 u; L5 }1 L2 D返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
/ z! r4 g& {( ^) f7 s6 {7 P+ a
* X0 | l: I s程序代码. j+ G/ M( d) p. U
import requests* h$ z- O% j# a. d; \
import re
% i) s3 K0 w) j! N! z7 Vimport os
# [) i8 k+ c/ b8 ^/ Y# z/ T
, H5 p2 }+ K5 t# ?image = '表情包'
, e7 _$ A* ~, _ L$ L* Hif not os.path.exists(image):
9 I: U5 M1 }8 c) _0 y: h; } os.mkdir(image)
/ E5 i* p5 ^6 ?# B9 n* T7 }headers = {8 o0 i! F% B8 p+ V, o! R0 S
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'% b0 U# J$ V& A/ G7 Z1 ^* t
}" j5 _, x. E% r/ E. B
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
7 p. y7 ^+ ^4 h6 W5 rresponse.encoding = 'GBK'
, m& k0 Y" u) ]- |! ^response.encoding = 'utf-8'
/ y! o: j( i+ _" S: u6 b7 p" Nprint(response.request.headers)/ a% c5 d. H1 B4 u( e: Q0 d0 K( J
print(response.status_code)8 z8 Z; s& }% p: U" @+ n2 D2 Q! i
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
% j: j+ r7 b( V G# zresult = re.findall(t, response.text)
' Q+ ^, `4 V$ Q# G# ?$ e* k" `; yfor img in result:
( s# Z$ F8 n, @. \) Q& I" Y print(img)! Y7 l7 y' i. ]* [* Z. I' f6 S9 `
res = requests.get(img[0])
$ z8 S% I9 _8 A$ @: S4 N+ U/ ` print(res.status_code)
& u1 p) i. E" y/ Q0 A& g s = img[0].split('.')[-1] #截取图片后缀,得到表情包格式,如jpg ,gif
% N$ K$ `6 R. n' V" g# w' a with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
; V; S/ Y$ \9 x' W7 A$ \ file.write(res.content)
: L0 n0 F; W+ c! z; G9 U最后结果就是这个样子:
, v; D! ]( M" o0 O1 }2 l7 h0 x$ B+ M' s1 a9 l' B% `
; m1 e1 p& d2 ?" o. ^————————————————
$ t# U" m' y% x版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- B3 e( k: }0 u' J' }6 B原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690446 c' @ V$ z7 X3 {$ c
/ x& i. Y. J+ h8 q1 f2 l. U
0 ^! w. V. \* P7 y |
zan
|