QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2077|回复: 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爬虫入门教程:爬取网页图片- s7 v& ^, h% l2 M$ C+ c0 ]$ K

    $ ?/ y! }& j( u) ^" F在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    * l: @4 M' P& N, O  {! G0 _; c, d) \5 ^9 D) y1 ]5 K- K* W
    准备工作
    " k% _8 d7 T" ^  B! l语言:python# K( t, b3 a; o( {8 y8 ?8 x/ |
    6 l& @' {1 P- N6 j3 Q5 B2 ~
    IDE:pycharm
    , p6 J8 M) O- C
    - q' ^& |  U6 p0 ?  r首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    ) T" c" _( J8 x& r: U& x7 r0 L8 X& h' z, V- F
    import requests //用于请求网页* O3 t+ {( K+ g  b8 j! l
    import re  //正则表达式,用于解析筛选网页中的信息- G7 A4 k$ n1 H8 b* \3 ]/ T; X
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    - V+ ^- x8 z6 S" K
    & e" G# Y) p+ z1 V" @9 C然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:$ l% B) ^5 D- ~3 g; V/ Z
    3 Q; _" @, n+ m  _6 B& R
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    ) H& c! u. q' M& ]' T
    ; s; D+ o! \6 [# c$ ]' o
    4 h% l4 v/ i+ v8 h# T/ Z! j5 T+ T  Y3 P/ ?/ ^9 ~
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。. B( ^7 n  h; a- n) [

    + s) ?1 V1 x; Y  a' \5 l+ H1 d编写爬虫程序8 a: n* d, b4 L$ l7 T
    首先肯定要通过python访问这个网站,代码如下:
    . B+ U- i* S& C' m% k$ F4 ?4 }( R8 X# n  B0 T" k; V
    headers = {
    . ~6 g0 m: ^5 w% E6 W* y  T" x    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'" W/ T' Q; G& N% y+ J
        }
    5 B: N" a' z4 sresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    ! J- b, m) a5 z+ G7 b0 u其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    & c" u8 S5 o2 a* c1 h5 h* M# z( c, E% P+ z6 @$ r3 A) i

    ) ?$ F& O9 `) A7 L% c5 S: R7 B+ X0 h8 R) a- k( q
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    , @: R& Z, {% ~- c3 \' ~2 k
    9 o4 m$ |# v  f, b# m6 o( k" D) x; K

    ) ^" Z; B/ C9 S* Y/ Q6 G8 w, k 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    5 D8 T3 ]' ]9 X3 e4 C+ I
    5 t1 v2 c5 ?* ?5 Y4 b) b1 p0 Ft = '<img src="(.*?)" alt="(.*?)" width="160" height="120">', h9 A( v. s' x0 f
    像这样。7 n: W6 c5 ]2 i1 G
      L: T" q( l. _1 y$ S" c% O: l1 P) {
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    % z0 s  K2 {. }
    % Z% @3 x% ^1 ~result = re.findall(t, response.text)
    % v# w9 r: w2 t1 W6 Z  |1 f返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    2 U* d! ^6 p4 t& q0 J- ]: z  ^) x: k2 x
    程序代码- _2 t6 k$ C: q( J2 ~
    import requests7 x, _' K+ q) z
    import re
    6 ^+ U) J' _( {6 }; O; T  w# Qimport os
    9 D8 d1 Z8 W% j& t( `& _1 c- y! g. \5 Z
    image = '表情包'
    * V" _5 @% R0 z4 L. B6 X* y1 Iif not os.path.exists(image):' z9 u% e; X, ^( {5 p: g, m3 ^5 Q
        os.mkdir(image)
    9 s# a3 q$ f6 p' nheaders = {
    . t. T9 v0 i; ?; p9 z. W    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
      l* r$ s. M  k7 O9 y3 P% {: A    }
    5 i& u; a" E7 C# }' S6 |response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)/ A- l$ u- q' B* M
    response.encoding = 'GBK'( O1 g7 a3 R; a. G6 O/ o
    response.encoding = 'utf-8'
    * m8 X) p4 |% e7 G; Z. E: Hprint(response.request.headers)
    ( T' l7 K/ K: T/ `0 I7 u- yprint(response.status_code)
    6 Q7 {# ]8 Y' c& v- B) nt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    ( A. I# j2 F1 C/ y3 mresult = re.findall(t, response.text)( {  q/ |; `9 o
    for img in result:
    ! Z6 p% B4 Q* o& B. d    print(img)
    ' |' ?- g3 p2 D5 o+ v, l; b) f    res = requests.get(img[0])
    + R4 t- R$ ?1 ~, b0 |, X3 h4 Z    print(res.status_code)
    9 d( z3 k% |+ z# F% Q  Z    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif9 m4 z' |7 s; m5 w; p8 q
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    ( z7 f' a4 B* g, D4 M        file.write(res.content)9 {3 a8 O" n4 U  c0 {# }& `* f' k
    最后结果就是这个样子:
    2 B: ]3 l+ T. W. i9 L
    / {% j' M. B! R/ a2 A6 _* e2 T4 r% a& E! H" P
    ————————————————
    ; a; m* |: ]4 a5 {! M* V版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    / i7 I. m( z  e, X原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    " E3 Y( \( l7 I" F8 y' N3 h/ P/ }: [$ m2 p
    , W4 L4 p8 }5 m
    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 20:57 , Processed in 0.454679 second(s), 50 queries .

    回顶部