QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2075|回复: 0
打印 上一主题 下一主题

python爬虫入门教程:爬取网页图片

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-7 11:42 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    python爬虫入门教程:爬取网页图片* K' B! _' l) ^, A2 l, C

    % W! S9 q" U# P在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:5 K" o/ [# J, y) s) l/ I
    % y0 i/ ?9 W6 o
    准备工作
    5 u% ?! f, Z; r& T语言:python
    ' A" |- k1 I$ X/ p2 l. I
    ( M( t2 ?8 ~) b8 c9 k! oIDE:pycharm0 U1 n; M- X5 e0 @/ G, _
    : I' r" S; K8 h: p# Q1 m
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:3 f! ]7 K7 s* X- |) u6 T

    / t+ ?0 Y. n5 wimport requests //用于请求网页
    ) `& }& `$ C9 w  W: x% o4 himport re  //正则表达式,用于解析筛选网页中的信息
    / u' t3 W9 S* ]# C# E; B9 I0 M; c+ _其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    : P5 t0 P" T9 i8 Z( C0 t, S& t9 F5 i: J' f
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    $ o% h% o0 O7 t$ p$ q/ I$ Z
    9 [$ X. V4 a7 {6 |: Z注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    6 U$ f9 C9 Z, B4 c$ U% f3 ]. ]$ R: `8 Q" Y- g1 e; f
    : h8 [. |' Q9 P8 T# h
    6 |' o1 t* `, o. n) y- o7 |9 a
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    2 q  F+ J9 x( t" S( `) B% ]2 M# c8 ~5 a( h+ b. S- W
    编写爬虫程序( n2 i# e- P* Y: o1 g# T8 `
    首先肯定要通过python访问这个网站,代码如下:4 e; g: l7 H( G+ u2 D' ?6 A  w2 M
    / ^5 J" n4 f0 e0 T
    headers = {1 Q8 [* X5 g$ x
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    # J# }' S) c. i2 G+ O. q    }0 D% s, T$ N. ^7 w
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页+ Q) T8 M4 x1 [- }
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。& @! R5 f* T4 W" D

    1 A+ ^5 t3 U0 F, o6 _/ G+ K- D0 f9 M
    8 N- U- _( P- N# Y5 e. B; ?6 f
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    ; I4 f" n  w8 Q. @9 M0 Q& k- y- q- }6 ]0 j% O
    & W! s! @3 p0 q! z

    , L# s" ~# G4 _: w$ b7 Z; N 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?: S4 t0 C9 j' |, {# D+ W

    3 \2 Z1 I9 u  }t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    # P% `. B1 r' U/ |- G0 F8 n/ o$ V 像这样。" Y4 ]! u* X) O# c
    . a/ G/ Z7 i0 N3 [
    然后就可以调用re库里的findall方法把相关内容爬下来了:# m. Y/ e, [' e1 O. c

    , V5 K; H$ [5 d$ R& Z! g% x. V, |/ F6 `result = re.findall(t, response.text)/ {/ c  {+ _( P/ U/ B$ ?3 }5 M
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。/ F# u& G% C2 R, M/ x
    . K$ P0 R7 _. j! f" |, \( U# n3 I
    程序代码) s" g0 ]- D! @+ {2 c
    import requests
    , m4 r+ }& `: \. Y; i8 u+ H' dimport re
    , C! O. K8 g1 w1 |import os7 u% k# G  R; V
    : ^* W. @: g) f* I0 d
    image = '表情包'7 D, ?, J1 i: @, |% r: w
    if not os.path.exists(image):
    + ?6 I5 C/ G* R2 a5 q$ T) w    os.mkdir(image)' X' v' x! A0 _
    headers = {, a8 g( f- b7 t* J+ m5 f/ E. a
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'# t# b" h( |# ]# _! _7 J9 x
        }' f# Z  ^7 L0 c1 U5 p
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)4 S' k; `0 q& ~, E
    response.encoding = 'GBK'5 m4 B* W# R, A  t. x, R
    response.encoding = 'utf-8'
    ! w/ @% |3 ~) E8 j! E. e5 f7 W- ]print(response.request.headers)
    : W% }6 W* ]5 r2 z7 r. v; jprint(response.status_code)
    , m0 W7 G% H4 x4 F' N: at = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'' `3 m3 k- j$ |
    result = re.findall(t, response.text)
    2 p7 o! V5 w6 V8 T+ G) dfor img in result:) C: s* o1 U. N* G" M& {1 ~. m
        print(img)
    9 z# E' S% ]: z    res = requests.get(img[0])1 X. Q/ Y( ?+ Z0 N* l
        print(res.status_code)' A  `- X. m; l! P% w
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif0 b1 ?! ?) b' r" R/ J6 N3 H
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
      h2 `  I. |3 o: H0 _  ~' ?" V1 q3 `        file.write(res.content)
    ' a0 {5 [+ w6 M最后结果就是这个样子:
    ) l9 A  R% H! K) f/ Y9 e. {( S( Z
    / M* @, ~( u* j/ Y% s- _
    ————————————————7 y1 a" _2 q' ~3 w$ D  H
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 s: }6 H" A: R7 v" }
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044. R5 W  N8 P, S( t: C4 P
    1 F) f) F& z% e6 G- q8 e
    ' l; G- {5 }9 U4 q  i% p5 i
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-22 15:36 , Processed in 0.742186 second(s), 51 queries .

    回顶部