QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2036|回复: 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爬虫入门教程:爬取网页图片5 \3 Z& A+ T; F7 \/ [. }6 t
    # Y' w( x! p, D/ K5 c
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:4 R& A# b; Y/ o; N

    7 `9 p. k( v; N准备工作! j# M. }. F! j5 j2 m. s' ~
    语言:python9 V0 @. h4 N! y7 C

    ; K: E* p1 f3 U# [: W4 b% aIDE:pycharm+ s: Y% i( Z" y! L* |. r
    1 f3 J  k. B; i5 u" I6 o
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:5 Z5 q* R* D6 Q* y) l
    8 {& q% ~, W, U) ]: N* n  [
    import requests //用于请求网页2 A+ I9 R3 o* k8 k
    import re  //正则表达式,用于解析筛选网页中的信息
    9 ^7 ^  ]7 P! B* E, n1 D其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    & b$ Y1 g1 M+ w
    4 [8 V6 K* X4 X0 K然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:$ [: t2 [0 I3 @  f- a+ E' C& W

    ' ?1 |2 g/ L2 Y- e2 Z注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。  O. h5 D9 X& b- q* x2 V! ]3 ]8 L8 @/ ]
    ; G  O# V3 r; _  }( O
    % |( Z8 \3 m/ N' y4 d: l2 \$ H+ |

    1 _5 N: L) a- x4 ]$ a3 x% `9 ~6 }我们要做的就是通过爬虫把这些表情包下载到我们电脑里。& j, ], o. q! K2 m/ j0 G
    0 O4 I+ J( q- Q0 C  _
    编写爬虫程序
    ) E. W) S/ G" R7 X0 P$ i' G首先肯定要通过python访问这个网站,代码如下:
    # W9 m' |; w# G; c& g3 S/ Q
    & P3 I1 r& ~- p7 ^" w4 j9 }headers = {
    1 K3 @  b3 K4 A  ^+ t9 n: E! g    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0', J2 |+ e9 @1 r+ J! [/ [. Y
        }
    ' l& a- E4 }3 n) A; Xresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    4 q1 t1 p  {' I$ D  ~8 [其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。. D" _# Q: R. a9 F' K$ C& G' Z3 g
    0 b) Y" N: ?. `% x" W
    3 _1 H/ Y9 O* A& ?0 i7 T) i' \

    . r1 H8 z8 _) z+ V4 a- z: e: Q然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    ! `# r; j' w, V
    ' v+ F8 r+ A4 W( n* i* G" r4 M5 f, E
    : m/ D, p# s  B  K' I
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?3 q1 W  e! ]4 a/ y

    4 [+ y, L; L* V5 J, i+ Zt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    4 O2 L7 J# h- ^, t 像这样。
    - G: g" ]& Y7 V$ X, f9 ]0 p7 e2 t5 \* {1 g; }* ~5 c4 b: b
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    ) W8 f2 Q0 Y# o" L9 d- r" b
    - ?! m% ?" v9 S% B6 xresult = re.findall(t, response.text), y: ~- g' T# p% Q/ Z: r
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    ' W3 M4 _: k$ W* m, U( S- g7 ~! }. ]
    程序代码  u$ X/ H1 x4 Y8 ]+ ?, X0 O
    import requests
    8 U7 ?+ F! }# F+ h* V7 m( z) O) cimport re
    ) h6 t: C# T3 }2 `+ Y6 o0 n- kimport os
    " J1 m, Q2 O3 s. E6 S
    5 K  \1 W  ^' N; ^" J! |( Aimage = '表情包'
    & ?' t# l/ \8 ?9 m. ^7 o8 zif not os.path.exists(image):
    ; R% T& P; N4 ^2 A    os.mkdir(image)
    # Z! W; I5 o6 V) N1 S/ F' Wheaders = {/ c8 h# O" G: S; F$ }
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    4 O: {$ L3 X) A    }; l3 Y- s+ V7 R1 @, N
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    ) `. ]6 W, V5 @8 J) ~7 ^7 Qresponse.encoding = 'GBK'" }7 s4 c0 o9 k
    response.encoding = 'utf-8'
    # k) i/ [6 y2 c4 P6 t8 f$ Fprint(response.request.headers)
    1 M7 o& q7 W* J* W2 ]" ^3 M& q5 ?print(response.status_code)4 _$ z3 I- O7 A$ ?
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    5 k. Y; W  j2 J+ H/ p, }result = re.findall(t, response.text)
    ; H1 C3 K7 u& O. P) N! F1 Jfor img in result:# b; z3 E  `* T* b; S0 B
        print(img)
      ]8 b: \- @3 ?, r/ M. D    res = requests.get(img[0])% E0 p, ^! a/ Y6 ]; f0 V
        print(res.status_code)
    : ~- a3 h9 ]# w4 o' @6 v    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    - \8 t  s: A; F$ C: O( ?  Z    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:/ h. W4 \  C- N4 B& a' I
            file.write(res.content). [% O  F( H- J4 e) |
    最后结果就是这个样子:8 Y  j: D8 f7 e8 b) P1 ]
      ]$ U6 O3 O9 p' o

    " K$ O5 |+ w. ?, D! C; L8 N9 l& k————————————————0 x5 q9 f# P/ p5 V0 n  ~/ H
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    $ A  c# ?" {: ]8 M8 F8 i! B原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044+ s1 r* `; S$ \0 h% I6 X2 w9 u+ W

    $ z: B3 Y3 q9 M- }5 {
    " T% e7 ~8 S4 E8 f/ W
    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-7-29 17:39 , Processed in 0.409515 second(s), 51 queries .

    回顶部