QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1999|回复: 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爬虫入门教程:爬取网页图片
    + P6 G0 D7 P: n' y% o, o1 U( V( k2 Z. m0 c
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:# ]6 m8 G( ], I* B
    0 ?5 i3 M8 z& H/ z$ G
    准备工作* _" E$ X% v4 X3 @
    语言:python7 U6 ^1 @7 u1 V2 B

    . K6 `! l+ c, y# X$ A. iIDE:pycharm
    8 Z  Z' H' |# l* r
    ! P/ H' e9 m; m0 P7 g% r首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:+ q+ e- b7 P5 n# y' w
    ) d5 ]/ m) Z# n
    import requests //用于请求网页) N3 _& v' W9 }3 p
    import re  //正则表达式,用于解析筛选网页中的信息
      ~' ~$ f/ z) M0 w2 [, M4 g+ n其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    + U4 ]2 k. x- o8 M. R
    9 [( }' p8 b  ^! K然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:$ Q: K4 J" z7 c; ~3 c

    1 |( l8 E% d2 N4 b注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。1 a" L; z) |. l! w) u

    + v0 ~, J# e0 |. @% \7 y9 N1 ^7 P7 V6 G9 L/ J  s! s( w' R

    & V2 Q" i3 A5 v. X0 w我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    / w0 O$ x/ w3 g3 H) r, C
    " W) K6 p% z2 O& T! s+ x$ F0 C编写爬虫程序
    ) z8 u2 k9 ~6 C, x! w首先肯定要通过python访问这个网站,代码如下:) l. j- T& ?. c* I. T$ G
    6 d5 D  z6 b2 _& F( u
    headers = {
    - E; A/ e$ r$ v& H% r: P    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'* @8 T# @- h# g( D
        }
    8 d3 D3 a% F! ]- w- Sresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    " F$ O3 p, z. f  ]) R' x' `其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。/ |" `* F" }6 Y) L! j- V7 I
    ' F7 E$ ~- _% W* W
    4 l, K) O. E. N

    5 Q. u* O( D! T8 o9 W8 ~然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    , [5 z% @. m2 O: q% m
    - \: s0 v- H0 u. n" o3 j; \" c9 j" v$ R8 t- I* t7 _. ]

    - Y, j+ w2 a% M8 R; h 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?4 [; W. C# h  Y* c% w' ~' j
    1 l, c: }- w; k5 w( Z0 R* x
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'# r; q; b- v) S  A( P. N5 }
    像这样。
    7 B, R  Z+ ~4 _% u* |* n0 l
    # y+ R- G7 i! w然后就可以调用re库里的findall方法把相关内容爬下来了:* `- t, v9 _9 F) F, V
    / P; M$ Q7 G+ \/ E
    result = re.findall(t, response.text)
    3 ?: _" o% p5 F& h$ x/ q' o返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。: N+ T. K1 }4 c  M% N* x/ N2 B

    / J! n& L/ A4 N! z. l( u0 u程序代码5 N, E$ f0 G1 ]4 z' `# J1 ?; a
    import requests- A0 y. @. P2 C  b8 ]& @
    import re  r( a3 z& t6 x/ c7 ^+ B( g
    import os. }8 V; a5 m) h' S% V$ p" q

    2 H( D2 {7 C0 S6 U' O" vimage = '表情包') h- G; a! w4 }% i' s
    if not os.path.exists(image):4 P& N# b" h; R! b2 i$ S
        os.mkdir(image)
    0 F- o' ~  |( V0 V  a( yheaders = {
    3 O) ~# X7 d% `6 f, L8 g6 r    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
      ]% Q. Q* k$ W/ J$ b    }
    2 ?4 [9 A: L& {4 b! l$ cresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)7 U2 K% g* l5 `& r6 M- g, j7 g- e
    response.encoding = 'GBK'
    # K* y4 i6 r4 |7 E  aresponse.encoding = 'utf-8'! s( f' u+ B0 D1 r' E9 |
    print(response.request.headers)" |$ E1 S. z/ j. c3 y* p
    print(response.status_code)& ~$ Z  y& y$ w( I
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'# y: H6 u3 x, Z/ b6 T/ I5 `
    result = re.findall(t, response.text)
    * b& d3 ]% N- a5 efor img in result:: W; h- j3 J; c
        print(img)3 G9 {' ^/ c2 `4 f. h9 E( I
        res = requests.get(img[0])# ~  M7 U6 g+ l* h+ b1 m
        print(res.status_code)
    / K! n# T/ I3 i) ~    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif& W0 J8 q6 x5 j9 O( J% O+ L
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:& R; l& \/ n  Q  m
            file.write(res.content)
    ) N; C+ ]. O  h最后结果就是这个样子:
    0 Y& e# a+ T5 l! y, j+ h9 f; T: c; T6 P0 K

    2 \8 c) F+ e0 }————————————————
    9 y' H+ {; p2 O  g  U( o) `5 I3 u版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ; \5 ?8 h( T) H  r" u  m' a) l原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    % c& [; v9 [! r: L# q! e
    2 s+ O  P. u7 T! V+ y( b; g. C) U! Q2 C$ K! R
    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-4-11 19:22 , Processed in 0.413210 second(s), 51 queries .

    回顶部