QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2001|回复: 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爬虫入门教程:爬取网页图片  [, V% _8 x6 }6 Z

    5 ^1 ^" y  ^! w* l, L) P9 Z+ w- M8 n在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    9 v& a: o: c. {) q8 Z8 Q0 l! h( j' K/ F2 O. x# d. _
    准备工作
    9 D# `& D' N* A1 B2 e语言:python' t& X8 u7 K/ r8 }8 u9 r4 e, A

    # h' J6 O7 p9 u3 n# g2 ?( h) wIDE:pycharm) r; F. T' g8 E  Y2 y* j( M$ x# E
    ) X0 w7 ^$ B5 S4 Z3 c! ~! ^
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:/ A$ e) G+ D# @: X' Y. F* V

    ! U8 b6 w4 S. ]4 c1 ]) ~- ^import requests //用于请求网页8 {" B5 s9 |* d- |" c4 N, i
    import re  //正则表达式,用于解析筛选网页中的信息
    4 X  q0 |3 ~! g- W! l& f其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。3 v8 X  P- a: V" w3 }& v3 B) o

    % w6 Z5 \# P( C) X$ w$ n/ z然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    / b2 q9 Z* B% d7 V2 e. a8 A6 }9 n1 l% h) B
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    ) l9 E6 S2 k2 X) b. l- Q# `
      g" d. ]1 l; i( u" J- n1 T9 O; S+ G% U! i$ ?; l$ Z/ ?

    : E, P+ O) X1 N/ x$ {% u. g我们要做的就是通过爬虫把这些表情包下载到我们电脑里。% c  t/ ^4 v+ k# T4 ^

    . \0 z+ s* L0 r5 }编写爬虫程序. Z3 }. _( W3 {( K
    首先肯定要通过python访问这个网站,代码如下:
    " d. L, P% t- D! C# h5 A7 r. _$ G6 L, r8 {/ J1 W  P/ ]) t
    headers = {- u( q$ y) A& i: C2 u2 Z& N
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    9 L3 H6 q) h2 G+ m1 H* [. ~4 J    }
    4 }, y, C  _+ p: V7 @3 o& xresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    " n# b/ G0 z' ?  f# F" ^+ ^其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    / n& Y, }$ K! d5 s- Z% P  t. V; f, c* {; k
    8 N1 w+ }) H8 k+ K4 E  `4 ?
    $ A2 e2 {7 M3 I% Y( v7 u" u
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:1 M( X$ v. ]2 J
    + C* O0 d5 W: [% O$ Q/ `
    2 |# r" y% ]2 m
    2 k4 h1 {8 I: P( l0 u! q7 G
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?$ p! z+ L( Y8 g* r0 U- s
    : E9 T: s' r1 o( g. P2 g" S: z# X
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
      [6 L7 L1 x' c) p, d 像这样。! @0 k$ A" B8 ^+ P2 Q

    4 _9 k% a3 @+ N7 K4 B+ H然后就可以调用re库里的findall方法把相关内容爬下来了:3 X# J9 @2 u  |. M* m1 h

    . N8 l7 A. _$ l$ ~# Vresult = re.findall(t, response.text). ~# {  w4 q3 B# ?$ }+ k9 R
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    ! ^6 H/ _9 S1 T% Z9 N4 _
    + V& I/ `, m# }" o程序代码& u, C! P2 Q% I5 ]1 |3 ^% B6 T2 Z
    import requests0 I1 x2 x, p( y- ^3 R# m/ {# n& W; M
    import re
    * J& r- O' ~; E) Eimport os
    2 T5 J: r- W6 N4 g% ?9 d+ }8 ^
      V1 n! e/ U5 n( {  Q4 \+ uimage = '表情包'  |' p# G; [$ R
    if not os.path.exists(image):
    $ v; h: r0 x  c6 G+ q# B    os.mkdir(image)$ y5 C" G( H8 x, ~$ U6 ?
    headers = {2 N# V! S* ?# b  x: C4 V+ s
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'7 a, s2 ~# w5 _
        }
    ! P9 G, o; F" d7 D+ Vresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    3 A' e# h! o! _% U0 \- Qresponse.encoding = 'GBK'  d) y9 ~- k+ [# L# C9 n# l- J
    response.encoding = 'utf-8'  j, A# ]) `( `  Y  c
    print(response.request.headers)
    2 q+ d8 ?) S. c1 ?print(response.status_code)+ Z  |2 K' f; R* u, o' ]
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    6 A! d; j/ o6 G* {$ i% H$ {4 S& iresult = re.findall(t, response.text)& l' [7 s+ |4 M" M
    for img in result:
    % z7 ~; D, q$ J% u. q7 ?    print(img)
    3 y& R" d" H3 o  O& @8 o: _- K% e    res = requests.get(img[0])
      }4 [3 A: l3 S( Y- R    print(res.status_code)0 ?# D/ p5 a1 v
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    9 D3 R4 H8 o2 q    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:% A/ r4 D# W' V' e' ~# D6 N0 R
            file.write(res.content)
    & j! g2 Q2 q1 D9 u最后结果就是这个样子:
    & i( B( a( f: j, O9 P
      \4 S0 [" G8 J- X/ i  a$ b: n& ^
    ————————————————  J' S% @8 E0 J1 Z4 g4 a; L5 O
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! i: j5 f' ?" S0 \/ R- l) I7 l
    原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690442 |0 }1 T8 c% D3 f! w8 u6 [0 q5 ]4 S! P
    ; u5 C  \# v1 H* i8 y+ y) t6 v9 b

    7 _% a6 y  ^0 S
    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-14 12:12 , Processed in 0.300637 second(s), 51 queries .

    回顶部