QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2019|回复: 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 h3 ~/ y3 w+ J; O

    $ g" a5 l( G2 @3 ?& A在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    & z7 P! ]9 X6 c  F
    7 L" }5 {/ O# o准备工作( g, e; I4 Q, g: U5 l
    语言:python! P( v; a3 r. o1 _" J7 o
    ( E- {  {# S+ L3 i
    IDE:pycharm
    0 Z4 Y7 E- r# r" @4 j1 h* E0 H& y' v& L
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:% [0 s* o6 N) k! F) @
    5 F- {; i7 v6 E# P" v5 b+ P
    import requests //用于请求网页
    + c/ @& X* Z' `9 n7 Wimport re  //正则表达式,用于解析筛选网页中的信息
    # c4 ^" S' J$ U; E其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    ' q/ A5 x7 Q, w  u' }  a5 h% Z' l: w
    ! ^) t2 e& b8 b" k5 L& n5 e然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    ! b0 `% ]! ?3 v3 }# {8 y/ k( f  L' I) f: ?6 d
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。) {* m. x) C6 y/ N

    7 K* Z) A9 l( n) d, }# ?
      P5 E3 `+ h- K. [% q$ H
    / c- k- B3 Q, o* w我们要做的就是通过爬虫把这些表情包下载到我们电脑里。- J  E3 U" ~1 I  h

    ( h% I# A! P# }7 H编写爬虫程序
    / n. Q. E4 E4 h0 P6 E. j  w; {首先肯定要通过python访问这个网站,代码如下:
    0 Y; O6 C1 X4 V
    8 o- J) g& v, Y* b' U: w( hheaders = {6 h7 X* f' q3 L% t; a
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'& v" _1 B" T% i" D2 F- y- }# i- B
        }
    ! v& D7 a( ?$ d1 m( h3 x' vresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    $ K6 m' ?  G5 S5 O其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。. a- b7 G, h- k6 I
    ) R/ Q: V0 o7 P3 W$ S
    + |# b2 ^9 p. x6 g" j3 D) j) A
    7 R' b* X1 t+ z, B
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:/ [! |9 X/ }" x7 n( c
    0 `( [) i" f& I( X1 W- T* ]  m
    8 _8 B6 O4 m% e. G, {! Q

    ' n& M: g* Y0 Y5 ^% m1 m 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?7 |; s& \9 {  G

    , O3 O0 o! z' j/ p/ }8 s: Yt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'- |% C7 m/ ?6 V
    像这样。
    / ~0 t0 k! C7 j1 }) G0 l6 K7 f9 H' W- U
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    + M0 _0 b/ R- l2 [# j( a% D& u. n3 ?3 R3 V; @. ~; f7 B) S
    result = re.findall(t, response.text). F2 t9 f7 v4 |3 N- U1 x
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    ! ~$ \9 d7 b2 V. c! k) H# M; G) x$ X8 r0 q/ H9 Y
    程序代码
    2 I% y( k* q3 _import requests
    1 V5 w; u+ J4 N6 A/ [" Zimport re3 \+ {0 u) t5 S% O1 Z. h' A. P
    import os% g; d: C; A. C6 }# c+ [
    ) C8 V$ ~0 e+ O5 z* h" L
    image = '表情包'" Y& |& f" a  y% Q7 M
    if not os.path.exists(image):
    7 Q+ M6 Z7 T# u    os.mkdir(image)
    + R9 L7 B4 V: z  g) F' Cheaders = {
    - e: m" }3 c- L6 `$ U" g    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    * p0 ^, _( d: F, C3 u    }
    0 v5 |, O/ M% W% D, p# q1 M& B; n  mresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    . b. x, t) c. u* E- V( w; F5 hresponse.encoding = 'GBK'' L0 P5 X4 k' X
    response.encoding = 'utf-8'! f  Y+ V! K& c5 T) A1 T
    print(response.request.headers): ]& u/ F- @2 B& `7 U2 h6 j
    print(response.status_code)+ F6 X9 h9 G& ?+ O& Z
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    / J7 R/ C& E5 Eresult = re.findall(t, response.text), j# e' M0 a* H& M; o% q; r( \
    for img in result:
    8 N) J8 t# ?) @/ o* n8 [* U6 H    print(img)
    & b+ @' \' H; E' m, r4 u/ N( F    res = requests.get(img[0])
    ( F- S* b2 N$ @; p/ A$ l    print(res.status_code)) ^1 m  `% }9 ?- N1 N3 o% M
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif/ K% {9 ]8 U$ y! S" i
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    5 |% R. z! Z3 n# }        file.write(res.content)# \$ R* S8 i9 |4 p" r7 N
    最后结果就是这个样子:  ?% y# _1 c* E. b' [4 Z/ s' {- S
    + q5 O5 D: O. J: L6 w- J' s
    ( m' u& c. m& T/ e7 |/ u
    ————————————————) ~! C7 @/ g8 {0 W
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。4 h+ b. e" G. f2 ]) {7 r
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044" u6 X; F; _1 F. |, p) s
    ! A  J$ \$ B" z9 }5 |& F) j
    & d9 W  V& z& r0 b8 E( F/ K3 ]
    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-5-30 21:15 , Processed in 0.406284 second(s), 55 queries .

    回顶部