QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2004|回复: 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爬虫入门教程:爬取网页图片/ J; C" R3 P2 T1 F0 O7 L) c/ F
    . u" U3 r# A! n9 s3 d
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:5 A& t' n' l3 Z* }
    5 \8 H: t1 @$ q+ z/ A$ b9 {
    准备工作
      ~. r6 V  q5 s. P2 }$ }8 O4 n; f8 N语言:python
    * U6 x0 }9 D0 u/ t9 w' D% k$ l+ W/ ?  C+ w
    IDE:pycharm" T5 s' \, K2 S5 ]. m: z
    & }) ~. q# n7 a9 Y6 f- E
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:/ g! T9 _0 C3 F# v
    3 b: S# {7 \2 Y3 E! Z0 X: \
    import requests //用于请求网页
      X( O- J9 p* A4 s# a8 T: uimport re  //正则表达式,用于解析筛选网页中的信息
    $ Z. {/ C) \3 E其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    # t1 \8 \) N/ c; ], {3 W
    , n. E& P' E  Q4 R* D. C然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
      e* r4 u( _$ o" c8 h) Y. J+ R) \* b2 i4 a( H3 K8 Z
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    ! Y; `+ V! A! \( x+ Q' }$ J
    / {. X) M+ |4 I. M, `* a$ R: ~# T2 N" ^! x* W0 x- Z; K# L1 x* i

    ' Q' X; z* O& X$ a我们要做的就是通过爬虫把这些表情包下载到我们电脑里。$ q2 H% G" r5 h

    - T/ K- T6 C4 P2 q编写爬虫程序
    " x% ?+ l4 C' |0 X8 y首先肯定要通过python访问这个网站,代码如下:& H+ u9 Y, S8 r) ]: v9 H( D

    3 e$ J5 {. _/ h: E9 C6 mheaders = {
    $ k- J, v9 t+ g* ~4 J% i7 G( N    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'9 \7 }. O3 O& H9 F) \( \5 T
        }4 k  a3 X% ]4 H- U& @
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页/ j) z# I4 j, [3 m, S+ F5 b" N; ]7 h
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。; S. w$ R; [# V9 W
    % |9 Z7 v/ S8 s4 B& M( n* ]3 j

    8 |1 X* o' Z4 u  b7 y+ e/ t* O6 S" J  x. b0 d6 M
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    ) z/ s- S+ ?4 k( B
    ! A* f/ R8 z* z" o; P7 E- Q
    1 A  ?9 [  S' ~7 F8 O7 N4 r8 w; ~3 \; g/ |; t: ~' C
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    , j  t" @% H* [0 `7 h* S
    ; j0 ~2 v" K" C( ~t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'7 J* l7 m9 T" k, R" ]! r
    像这样。
      t! C4 W. t1 F. O& N3 z. _" S  A- u" u, l- s! P
    然后就可以调用re库里的findall方法把相关内容爬下来了:2 H% R4 E! a" e5 q/ Z' C

    . m, T$ Z$ @/ G2 w$ sresult = re.findall(t, response.text)
    7 g0 N3 r% k0 |7 u; L5 }1 L2 D返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    / z! r4 g& {( ^) f7 s6 {7 P+ a
    * X0 |  l: I  s程序代码. j+ G/ M( d) p. U
    import requests* h$ z- O% j# a. d; \
    import re
    % i) s3 K0 w) j! N! z7 Vimport os
    # [) i8 k+ c/ b8 ^/ Y# z/ T
    , H5 p2 }+ K5 t# ?image = '表情包'
    , e7 _$ A* ~, _  L$ L* Hif not os.path.exists(image):
    9 I: U5 M1 }8 c) _0 y: h; }    os.mkdir(image)
    / E5 i* p5 ^6 ?# B9 n* T7 }headers = {8 o0 i! F% B8 p+ V, o! R0 S
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'% b0 U# J$ V& A/ G7 Z1 ^* t
        }" j5 _, x. E% r/ E. B
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    7 p. y7 ^+ ^4 h6 W5 rresponse.encoding = 'GBK'
    , m& k0 Y" u) ]- |! ^response.encoding = 'utf-8'
    / y! o: j( i+ _" S: u6 b7 p" Nprint(response.request.headers)/ a% c5 d. H1 B4 u( e: Q0 d0 K( J
    print(response.status_code)8 z8 Z; s& }% p: U" @+ n2 D2 Q! i
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    % j: j+ r7 b( V  G# zresult = re.findall(t, response.text)
    ' Q+ ^, `4 V$ Q# G# ?$ e* k" `; yfor img in result:
    ( s# Z$ F8 n, @. \) Q& I" Y    print(img)! Y7 l7 y' i. ]* [* Z. I' f6 S9 `
        res = requests.get(img[0])
    $ z8 S% I9 _8 A$ @: S4 N+ U/ `    print(res.status_code)
    & u1 p) i. E" y/ Q0 A& g    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    % N$ K$ `6 R. n' V" g# w' a    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    ; V; S/ Y$ \9 x' W7 A$ \        file.write(res.content)
    : L0 n0 F; W+ c! z; G9 U最后结果就是这个样子:
    , v; D! ]( M" o0 O1 }2 l7 h0 x$ B+ M' s1 a9 l' B% `

    ; m1 e1 p& d2 ?" o. ^————————————————
    $ t# U" m' y% x版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - B3 e( k: }0 u' J' }6 B原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690446 c' @  V$ z7 X3 {$ c

    / x& i. Y. J+ h8 q1 f2 l. U
    0 ^! w. V. \* P7 y
    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-17 12:08 , Processed in 0.704315 second(s), 51 queries .

    回顶部