数学建模社区-数学中国

标题: python爬虫入门教程:爬取网页图片 [打印本页]

作者: 杨利霞    时间: 2022-9-7 11:42
标题: python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片
; ]. Q  I+ {2 x) r5 U( R& h5 w) B7 @) m0 L
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
+ ]  P  k& Y" k: i  Z5 b
2 G0 D7 g' k2 ?1 m* H1 U准备工作% a" U6 L* P# F. `
语言:python8 u) B* t9 O$ j* c4 D/ j  ~

* E# K1 c1 z& Z! b2 XIDE:pycharm1 c4 Q" m; G+ c/ [1 T6 g/ K
4 i2 w, Y* L8 w
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:" O7 l1 |9 L& f$ A2 c) {" h/ Y
3 v- e/ s! Z, F! v& r0 F+ R/ |* V/ B
import requests //用于请求网页
/ L( Y+ d! M1 z) T; [3 ]# T5 b5 zimport re  //正则表达式,用于解析筛选网页中的信息2 B( w- @# o% l$ O9 {
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。2 B& Z; D5 f: f
$ o8 |' A/ j4 q8 c, l" w
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:% Z2 }7 x4 J# J: f) e
' B% C; a9 @3 u+ S) Q/ ~# G
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。4 j& N; b: u2 @+ X6 B+ Z& a/ c
2 f# s' l+ ]- k0 X$ t+ v

8 ?# S% s* H2 W. y8 U& E% I
, o5 N0 c; p# J$ W& g我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
# n% R9 q7 M/ D! n' R. i
1 x5 ]# S' g: z编写爬虫程序/ y2 S% v: H! X+ X9 w$ E: C
首先肯定要通过python访问这个网站,代码如下:
4 \( ]) h5 l" w# [  F6 u' ~  O- u" ]$ M% @
headers = {
) E0 x# o4 ~0 u+ o1 }    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
. ]+ K1 M1 U- ]) Y    }
4 y; |; _- ~, k5 j, E6 o. Eresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页  X+ [' o$ J, [, u' z
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
$ Z& |2 I- ]$ C! {( }' L! G2 L/ D; L& I6 r& I

1 X- p' e" z6 u4 k* A0 K' W: W8 w
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
, Y/ j( q% u* v8 C0 H) z$ I5 y9 ?4 i+ g. @& L4 O. I- S0 Q
" L" z& Z& B  ~1 A- ?. R

* g' n( k( u: a3 \' ], q7 l9 o 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?2 k& {. B/ P& a
3 _" a: }5 W+ Z) m
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
8 _! d) t. G- u' m& m( |% d+ j7 P 像这样。
0 Q2 }1 C* H* G( P, M
# A5 c0 x. a% N/ }6 }然后就可以调用re库里的findall方法把相关内容爬下来了:
, e, Q) Z6 K( s0 S# h; x  c2 Z; j2 k! k; i8 k
result = re.findall(t, response.text)6 X4 J3 _7 N6 X" ^8 F! w
返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。; R$ i' ^9 s6 Q- V
9 R3 G9 F! q8 w3 W9 U, l6 t
程序代码
" P+ q8 I# r) }/ C" S! ]import requests) e2 N* \( s9 V$ z. ~
import re
+ d, Z' g( I- f: ?7 Iimport os) ?5 o6 j: B2 l1 g; {5 q
. A% Q! ~! d( F9 H1 ^7 B7 k. ^
image = '表情包'
/ ]. N6 P) p$ a4 J0 ], j4 \if not os.path.exists(image):# i. z) f0 w; P: `% |% `
    os.mkdir(image)
' E0 J# `8 G8 ?! M, Wheaders = {5 ?+ }0 s. Z( O$ x5 _3 o
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
9 L+ h' T7 x3 d8 k4 y) s/ h1 @    }
. \& Q, }% k; s; L) h2 uresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)% R  n' [, ?2 R# k( X
response.encoding = 'GBK'
+ j/ ]' M; U5 Hresponse.encoding = 'utf-8'
8 H$ l8 m7 h+ e& }1 q' xprint(response.request.headers)
& d( \. p4 v& a0 d9 {! d$ P5 v8 Z; w5 b$ Hprint(response.status_code)1 j  ]8 K, }- \2 @2 I
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'' c, R9 \7 v+ M# |# p" P
result = re.findall(t, response.text)$ A- a+ ?3 n/ l' P1 F- G: S! b: t
for img in result:/ l5 m2 d. f3 T; V; \
    print(img), o1 z" z; j1 V$ x' i2 V
    res = requests.get(img[0])
1 `" z% ~8 Y* d/ {7 \% l; s    print(res.status_code)
4 N7 l  I' ]9 y* F4 E& H1 W    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
  o0 M8 c/ d- I/ w1 x4 O5 E4 a: R3 \    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
; n! u" S. J7 ]0 K+ N  W, _        file.write(res.content)
3 j4 j) t) |+ v" \最后结果就是这个样子:) S/ J& c4 `( i

# E! q0 y7 u5 U2 l! T% G: a0 H2 g- n9 q" p% m8 t$ T& S
————————————————! U% c2 y& t$ @* ^( k
版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ C$ a0 [9 H9 c
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
% g6 ]3 z% V% R0 P) t0 R2 B3 q* ~# I0 g& D2 X6 f

1 ~$ j  H. Q6 q' ~0 k$ q




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5