数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-7 11:42
标题: python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片) j; t; H) u( T" S. O% ?) r
  ^" ~" q- V) M' G) B
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:' E. [2 M& `# S' ]+ }$ E, s
4 h+ X7 Z# g& @9 a+ D
准备工作
+ [+ q3 _: y# [4 x0 H4 V" K语言:python
! ?" X$ I4 h% V! x+ \9 V- L! d2 Z. j. N
IDE:pycharm
2 O- x2 L  E4 A# N  [7 n' R" R" h- C, [
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
# Z9 ]4 H2 t9 s4 Q1 w0 F/ v( e6 u2 E
" B2 x# I! D, \import requests //用于请求网页
) J! B& J1 Z; h  Z' F' x$ bimport re  //正则表达式,用于解析筛选网页中的信息
& T0 B. k& @, d5 @. ~- [其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。, h" _! J. S: L; v5 c, ^$ x& p5 B7 ]* g; N
' j% |% }/ z" }4 h- v, S
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:2 f3 N9 H' @7 U6 D, h3 a
0 t% \: H7 M4 g  |. C9 }2 X
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。2 ~) U  g7 ~( Y: G6 }" ]% [% b
4 I7 o! i  U7 f4 U) E% a4 B
* p* Q, V' i$ ?, _) G5 g4 ?& e% I
7 ^6 s- [, L: r2 h
我们要做的就是通过爬虫把这些表情包下载到我们电脑里。; H( M" H% p3 D7 g8 ?$ M, C$ |- y
- {0 n% ?: u* g
编写爬虫程序
( ^' I: u) c6 B9 a$ K3 s首先肯定要通过python访问这个网站,代码如下:# U& j5 e  u5 X4 K# C' f9 [% U- A+ f

" P# ^" y/ J  K. f+ x. eheaders = {
( K" j9 H0 J, N  f  F+ i. B% q; _% E    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
# G2 Z4 a+ O9 F+ H5 o    }
( T# s5 e" w; u' ?+ Rresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页) T" ^( O+ `+ p! {+ S
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。; c( r8 J; u# ?. m

# ~! F2 e; L, j" q
. K4 N( S+ T4 A1 ?3 N. s+ _0 ?3 w; v, A0 n" l
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:0 q4 k3 c6 N/ S: F

5 s  J1 o( o% C4 _3 d( n( b
# I4 E4 p( b2 j5 M3 _6 G) U$ v4 Y4 s6 A2 F, s
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?$ w& Y( d+ a* K9 Q( ~- R4 y1 C3 D& m9 Z
: y6 J  I7 Q8 ~' l
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
8 `! b  p4 C! Q* I 像这样。7 J( Y3 B5 W8 g3 J
. G% Y( O& H( B( k, P
然后就可以调用re库里的findall方法把相关内容爬下来了:
# |; p. c! x4 f# G; s, j
# S- c+ z# ]! d. X9 W  H& l! q, ^result = re.findall(t, response.text), y* J2 S' M: l4 X3 _4 J! {
返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
) k. C8 K! \6 L+ ^; B; P4 ~  D) U  C: r' e0 j6 @/ F
程序代码5 }3 s3 c% d4 h$ R
import requests
! {0 s- A0 u  B4 ^, O; Jimport re
. {& r! A7 `' U3 Dimport os' Y. x/ e2 `! g9 B* M) z+ B
5 I! g# |7 L  o- O4 ?
image = '表情包'
8 L$ Q3 o5 p- Sif not os.path.exists(image):% o! r/ H. r+ Z0 v6 I
    os.mkdir(image): D2 }" m; @+ h, q1 P
headers = {/ p  Z* b, a+ r8 ?  _& |0 e# X6 W
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'0 h4 b* p. g( m6 [$ o
    }' j- j8 F0 q6 X5 [( D) c+ k; l
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)3 V+ j+ ]  V. r; y6 f- R! U
response.encoding = 'GBK'' v# h$ r8 `' d" B- L( e1 `0 T+ v( K
response.encoding = 'utf-8'
1 o1 s& g; {: k: @7 }- uprint(response.request.headers)0 T1 X7 T" Y4 ^! \) ~
print(response.status_code)
4 O! j' w- _7 y1 X: v: F1 U; at = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
4 t- N+ g5 j8 g( O, \result = re.findall(t, response.text)
2 }3 a+ Z) V  n  Y) z! k/ n- q2 ^for img in result:
" R0 I# b% u6 w- e+ e( F4 A0 h) D    print(img)! }; r* m. V1 M* X" t: q
    res = requests.get(img[0])7 O5 U7 _  I7 R) M) @& Z7 d3 L
    print(res.status_code)
; O& x0 j$ ?6 A( F7 R1 o    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif  M+ i: J, I' N/ Y
    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:5 F/ t0 q0 G: _
        file.write(res.content)
0 R# c; d6 H  T8 b最后结果就是这个样子:
" j5 H1 b! ~& h; c- @
8 l: k2 n$ _) x& H! r% D3 \# C! A" j: h9 A1 q' a
————————————————
( n0 B( `7 ?( K" v" F3 E, K版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
2 e+ l0 }; T2 _- {原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
8 z; N* o8 Z7 }0 t5 Z" R+ `
. |$ q) y1 Y% U: o3 I: n+ |* |: V! v% v0 A" f





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