数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-7 11:42
标题: python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片
1 J- ~8 I( R7 y4 w' L" w) B# S6 m
; s" I2 ?9 n2 E- H# W在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:9 V# T) ?- ~2 W2 e% A9 ?
5 h- [1 o7 y& Z% z2 t: ^; S
准备工作
7 Q% C5 _0 _  w, s3 |语言:python
6 X' c3 f( u, Q* D
8 Q7 r% |+ b& s+ Y% }IDE:pycharm
' u# @7 y% L- g) ?: k3 O+ N
' i5 u, H9 o7 J. j6 r# @首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
  T5 B3 T0 w* A( Q) [$ r- V5 P* m$ Y2 C8 q7 `: [5 C
import requests //用于请求网页
$ d# N. z  v1 a9 }. l( |% dimport re  //正则表达式,用于解析筛选网页中的信息2 v* j/ r- H( f2 x2 d/ ^$ z! b
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
- g5 S- Z5 H0 I6 n  @) s: q4 Q" E' Q
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
+ O& [5 x$ v* }7 J9 }2 c& }# f6 j+ I& Z- ~/ Y% H
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
5 A* y4 L, r2 }0 C+ I# I9 q3 d
% S; p: d; s+ G% k- N5 ?. b
! h* `+ U( V9 Q. t& B
* f5 }) E4 A# U" z( H我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
) P: j  G6 l! T7 ]5 n/ o3 I' {; H/ w/ o6 S
编写爬虫程序" a/ i& M; ^3 D* q8 [
首先肯定要通过python访问这个网站,代码如下:0 \8 t! ^# X- v+ Y5 f
# R: E( _0 Q8 K; a" `
headers = {) f8 a1 m! R! k5 g7 V; S4 C  j+ ?
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'( h3 [/ E( k, h7 E( f" p
    }; ?$ u! B/ ]) @# L! {. m
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
- x# g1 q2 V0 j, O1 b/ j) ~' [! B" Z其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
: B% b- v. M* A* }, z
( i7 C4 K4 g! d! I; |
5 E' A2 V" b: y- Y  P
% D, _3 ?$ g( W- a6 x0 B% O6 ^然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
& W" O# P' ?3 G4 `# m: p" m: b) J9 b

) t% \! ]* w0 W3 x7 O
8 o4 ?. x3 f6 E0 z: @0 D 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
8 p& A& p; g, ^6 U
2 x5 @) A5 ~8 O7 z6 et = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'% s& r! K$ m7 p# O4 G& I8 ~( k
像这样。
& ^- V# Y- E& d3 p; Q) B7 b4 A9 t% t5 P
然后就可以调用re库里的findall方法把相关内容爬下来了:  e' Y8 J- ^  F/ U  V6 F
( [' |1 h) D9 o
result = re.findall(t, response.text)
! f' f# _) G. ^+ e/ s1 P返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
/ r3 v( K* ~8 P/ L0 w
9 w) I, ^, g4 k程序代码
" x! V8 P6 z% W( e. s" a+ Y. Oimport requests
. U3 n% k& f8 Uimport re- J5 h1 K6 b8 B9 T! J" V7 \, J
import os
) E8 C- Y) V) }) b" [  E+ C0 J0 h5 J7 L- C. x) Y$ }
image = '表情包'/ t6 h( z; T5 z- ^! Z! {
if not os.path.exists(image):& S7 L$ h$ _! P& m: ?( N2 i
    os.mkdir(image)
* @9 i. ^% g* kheaders = {
0 M! z: Q4 L4 o0 H) A    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
. t1 y+ ?' X" H+ R    }
! I4 U, D3 m; u4 E1 D* dresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
) N1 a! k' Y5 Y# W, R" _response.encoding = 'GBK'# y0 w; J! w! }# ], T8 J
response.encoding = 'utf-8'; c1 L2 y# _( J8 g7 P5 i8 U
print(response.request.headers)
. h3 O# j% Z2 q* r, f4 Oprint(response.status_code)
1 C$ w. V2 j/ w' R( Wt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">': Y* ~* ^) F  ]
result = re.findall(t, response.text)
5 Y" X& K: D8 b) s4 e! k8 @for img in result:- I  p2 @$ O2 J0 G
    print(img)
3 Y; L/ a" C& h    res = requests.get(img[0])
* e' o' y1 y! @. i  G" h    print(res.status_code)- G4 t* S/ B% P$ z& |
    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif1 q# u- L# p# I5 d% v5 T
    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:, u/ d6 \% [1 [' Y
        file.write(res.content)* D7 f& y# b" M2 c: \9 u7 p
最后结果就是这个样子:
  V( \2 ]: V8 w) v8 \! v% a& d# H5 t: x5 X& j4 r

( @% H3 [, j* ^/ y————————————————) l* G, A. i! o  @3 ^* v9 S7 k
版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。  d! F3 S. `6 ]- p
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
& |0 f. Q( p+ S4 S' h) Y5 \0 w2 F* X. }4 ?% U
1 u( D1 D3 U; A' Y: Y" f





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