QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2063|回复: 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爬虫入门教程:爬取网页图片
    4 s/ M4 B% Q) i/ b
    & i7 ]: h% c& v在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:1 d5 l! N& I) J$ \% ^0 b  y, N
    5 L% \; J4 ^- j. V6 P
    准备工作
    / |$ N: v; A& r$ W语言:python
    / |9 c8 |, n; `& N9 _3 E0 u# X4 V; Q
    IDE:pycharm
    / Q; p+ l8 D9 \( D- A0 O7 k+ }2 K2 ]* d  x6 c. W
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    " a' Y7 F8 ?" e: N/ m) m2 }8 j2 W! a
    2 Q& D. T% J% x* H+ B" ximport requests //用于请求网页
    ; d% O* d7 M2 a: j( ]) c. S/ T& kimport re  //正则表达式,用于解析筛选网页中的信息- p8 e" h8 _$ S& [+ j, n
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。8 M1 k  O: ?7 N2 p

    5 ?! E$ y7 Y* j) W) @; D然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:' ~3 z. f* b% W0 |& I

    * j8 N2 P( u9 l  u9 L注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    7 R, E' F5 t' I; L" r+ ~6 G1 U: a: A, W$ r7 O

    8 v2 @2 q- t' H6 h" R# Y8 z) H0 X# c0 I) J
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。! r$ L& p7 |% r% g* t

    7 B5 l. {' e8 i8 k' j: V1 S. _编写爬虫程序
    + z7 ^5 x* u& }$ i% @2 K; X首先肯定要通过python访问这个网站,代码如下:
    : q9 P6 m: @; Z9 J% U
    % C$ Z: x( P4 u1 Jheaders = {* n, C) F. l$ o+ g" Q( E
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    - ?& ~$ _; r" |    }# `, P6 ?2 _+ r9 ~
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页! P# X: F# `. f; C. y
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。5 T5 X- L9 _3 s* S2 u( ~( L6 S% ^

    6 U" E2 ~, {% i3 ]
    . z1 z7 f2 Z  X8 I% z7 m+ a7 u& ~4 j+ [+ w3 X6 H- o5 }2 ^$ d2 k
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    3 _( L% C9 C& @4 h9 y7 g/ q2 C- j; U7 @) K/ l. Y5 @

    : X5 k  o7 i3 k5 Y: w3 z+ X, [0 z9 F% [8 r9 b' v8 m2 o9 W
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?' S3 ~" c5 O2 r0 B0 L/ \

    3 |$ H2 ^" p7 |0 l( Jt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    1 s: D* _' p! [0 x 像这样。
    : q6 C  a) e& ]1 F; k
    ! `* A' H) T5 R$ ?然后就可以调用re库里的findall方法把相关内容爬下来了:
    ' M% ^9 ?  Z! V. r. q8 X" P# E* w$ j. c& i7 v/ c* g/ [
    result = re.findall(t, response.text)
    % h+ w0 @! a! {2 v( m返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    2 c" L0 c' i' X8 M4 P& {) h) x9 ?  ]- _
    程序代码
    ! W  v, w: X/ u8 ?9 f0 l  nimport requests) f" Q8 x7 b9 ]- }
    import re. q$ p3 D5 W$ g- W
    import os0 W" X. R1 N; h( k9 `6 L
    # E5 O2 s: J2 f
    image = '表情包'
    4 J( U" T+ o" D7 m/ y) Fif not os.path.exists(image):
    * F; d+ l- c8 G4 P* F  L    os.mkdir(image)* I  o6 J$ G4 C
    headers = {
    + y2 O* C, z" V  Z! N8 Q4 h. P    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    0 j7 `; u  g$ d1 A7 U" D    }, L( N4 Z+ |; [% Y
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    8 M  P, m$ w1 Eresponse.encoding = 'GBK'
    , C7 H1 A3 K5 b' a8 t2 R+ [1 Yresponse.encoding = 'utf-8'" j% w/ v& b  r& ~( F- Q7 I
    print(response.request.headers)
    5 }1 s' m& `- W/ _print(response.status_code)
    " O4 ^# A) m( _t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    3 G: R) `3 [5 s9 _' B( zresult = re.findall(t, response.text)
    ) w$ [$ {# l2 |& F: Tfor img in result:
    + n+ ?, w5 F. O0 L. C    print(img)! b* C" @) h$ v' M7 D) v' o7 C8 L
        res = requests.get(img[0])
    3 `; J2 a$ Q4 y( k    print(res.status_code)+ L$ s& h7 E& ^3 P
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif' e- j. s' G% H# H( s% s4 k5 C
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
      U1 D* O6 v( u2 U# x& D1 @2 m        file.write(res.content)
    6 S; V- M: d+ f' [  @最后结果就是这个样子:5 ~2 B% Y2 E6 D/ U7 j5 a+ }0 m
    ( [* H' ^5 @' M* p- u% b$ P

    & y6 t# f; |$ j, F; ]& s————————————————6 ~7 V3 t1 Y5 U1 S
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。. g. r9 M6 w0 S4 u  E/ d' y5 k
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    - g3 W6 w- R/ m! s( {* T; M# y
    0 z" }* Y! _; D' q* n0 c  L6 z- U. `, d2 M% 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-13 16:31 , Processed in 0.389098 second(s), 50 queries .

    回顶部