QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2022|回复: 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爬虫入门教程:爬取网页图片/ h# ?5 m, z1 u. T: G: P
    4 G+ e) E7 V4 r
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:7 |6 g1 v1 N- |/ A9 O
    8 E& L( T' T) a6 s9 }- M
    准备工作
    , K( j8 l# t% J( ~7 n& R语言:python
    9 f  ~& s. _* `/ C% t. G4 P( e
    6 m$ O8 S) x" H: YIDE:pycharm
    ! ^. k( E! m# E0 U5 z7 S2 u
    # d  T4 ~& h7 z* v首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    ; ?7 J8 v6 A3 [) g
    ) n/ l5 O$ A, ?" Aimport requests //用于请求网页
    * Q: T5 z* U( n# d0 h' rimport re  //正则表达式,用于解析筛选网页中的信息
    6 g" J% ?2 U9 g+ o! \- A' Z7 ?2 V其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。! S3 x; D& t2 t
    , M2 Y- \+ u* e1 `3 c$ O" R1 n% u
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    + x. G1 B  o- [
    % Z: m8 U! g2 H: f8 P1 L: X注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    5 @3 F1 }1 M( D5 V/ \7 k3 [* `0 x& w' J! h3 C3 v3 k
    . `9 [1 e1 T+ D6 v
    " i* O% }- g* A; G/ F/ d
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。& p: b1 K% R; t/ p3 r
    2 x3 q) z# `6 X
    编写爬虫程序' v' F0 e+ |9 }5 v. K
    首先肯定要通过python访问这个网站,代码如下:
    % v. N! X% ?3 k; }9 R4 ?3 m1 ?$ K4 u
    headers = {# L& n5 `. u) C" J
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    , G% V2 @" W5 N4 B/ {! a& ?  }    }
    " Z* E- _  x4 M  Oresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页# ?9 f4 X& C0 J1 t! a" h6 ]
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。) S  {" Y1 @9 X; ?& C: K

    , j% f! N2 x- c* Y9 ]: @4 C( ]; A$ I' S
    . G+ f& j' B, [0 P$ O
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    4 S, |' d- J+ G  {4 I! _, Q5 T& L5 M; K
    ' v$ d6 s/ [) C$ r2 p  F( t9 ~

    ) q" O' @2 M# @3 A 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    0 {# h" B8 c  j+ @: x+ U. M: S7 @3 g7 ~/ e& _) L0 T. L% N
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'% ~9 O. j- Q, {) [
    像这样。# P1 m2 Q: S/ I: O3 T

    / |: [* W( n3 ?& L1 E然后就可以调用re库里的findall方法把相关内容爬下来了:
    ) {* q3 Y2 g1 W0 L5 a" `( G
      m: W- P. V; L/ d9 a+ b8 jresult = re.findall(t, response.text)
    ) o; X/ P; N2 g: R返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。# n. I0 C% a+ L' O, c# M

    * ~. z4 ~  t  r, i& y7 W" d2 C3 [3 j程序代码
    ) K1 ~/ x4 |  V! O8 k. T. i  wimport requests
    2 x7 h% ^+ ?2 r+ d* O6 qimport re( I3 s" V. _' S- d  I$ t+ m! J5 V! A
    import os
    " ~7 K) y! ^3 e3 z+ @0 u) A; B
    % [+ @) n2 F5 K& M" W* Himage = '表情包'
    . U# ~* L  c2 d( l" K) L# N  D/ B% Iif not os.path.exists(image):) I+ E0 f+ s3 b8 L
        os.mkdir(image): O9 l" b% i* b* Y' f9 n
    headers = {, \' I- E, Z% n6 T
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'3 {' G+ B0 G) ?
        }' H, M6 S2 C8 o; a2 U* t. h
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    6 u4 [% x- H% C, O) U2 {2 D. `response.encoding = 'GBK'( t( n. ^' E, E  c2 |4 }
    response.encoding = 'utf-8'
    + H, s; H/ n9 j% {print(response.request.headers)
      I8 L, L5 `) o4 a! ?* ]3 G. g# Nprint(response.status_code)* ^& K7 x) {) j3 ~2 p
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    5 P$ I$ U: z/ Z: lresult = re.findall(t, response.text)
    # C( L/ k1 A5 efor img in result:6 ?, }8 T5 [; }. ?
        print(img)
    0 p- i$ s( \9 y) R% d# X0 y7 W    res = requests.get(img[0])5 f0 h. R  W+ i6 s
        print(res.status_code), b0 o6 D+ x  g) X* t5 m
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    0 n0 _- D- n" [2 X" r: {9 x' H    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:5 O' R/ x  I" I8 @) t
            file.write(res.content)
    : G& m8 G2 R$ D( ^$ W最后结果就是这个样子:) B8 T8 F4 [: j

      n4 g; g0 M! k+ @" ?; d
    3 K. q$ [  J9 V# q————————————————
    3 ]+ E' D" u& ]: a- |版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' J$ T$ `$ Y) `. X; E4 N
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044; w" N% O6 i  |& {9 B7 z% y
    - R! R3 ^! [  P, y

    ) p6 [6 v6 g' K1 T+ 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-6-15 04:34 , Processed in 0.367916 second(s), 51 queries .

    回顶部