QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2014|回复: 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爬虫入门教程:爬取网页图片
    , K/ c/ R6 C0 M9 j; R6 Q% B. l# x* f" t& J+ L- s. X
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:8 T7 I. ?. z( H" L# A' r
      ^' i0 r5 ?4 |8 b+ N
    准备工作
    1 K3 @; R0 |5 H4 Q3 ^语言:python
    " H# \, x  Z: T7 I4 x! x) C8 ?4 _8 K) ?. E8 q2 I
    IDE:pycharm
    + Z, t0 O& u& F9 p
    0 @# v+ p* j* h$ [- u首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    " k, v1 P9 v# T8 {: F  h5 s- l
    " J& o9 I# X; w5 }8 _import requests //用于请求网页* L2 i& o3 k7 u4 H+ w( V4 d
    import re  //正则表达式,用于解析筛选网页中的信息
    : g4 i) s$ F- P1 q其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    ( h3 x' E4 f4 N5 c3 E! r. R5 u/ t' J5 X; u7 [6 j2 e
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:; }5 X7 q3 V  G" m

    : b2 \9 x$ P! c8 u& z注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。7 X9 o% V" k& {
    . \/ Y& l% M* G0 o/ V1 s8 a) Y! i( H
    $ i6 }; c  ~/ ]6 t
    $ a0 q+ @( Z, v
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。5 }8 I8 {5 M$ A+ H$ ~# H* u

    ( b  W; C( }# ~9 Q/ }' C( B6 o编写爬虫程序; _9 v4 Y6 A7 K# r+ u7 u3 |
    首先肯定要通过python访问这个网站,代码如下:
    9 G3 g- M7 x+ \$ B* _) y
    $ Y3 g5 V# ~  V1 {8 O% mheaders = {
    " G; ?, N8 C/ j  D7 C, x    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    7 H: `4 V. g1 `' }    }  V1 b. O) d9 I7 `2 f8 \: [
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    - |- Q  D6 J4 `5 C其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    - F5 L: Y& C9 ?  m, z3 e  r4 S/ a3 ?

    7 }3 x3 C1 R7 ^) X6 }% L6 y7 @
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:% k3 g7 F% L1 U# N2 k; U: |& B
    8 }+ c0 h5 b, K" Z+ b

    5 v( T6 J' d" Q: w, T$ o/ `- P* l& L; u4 b
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?6 B! m! b- }1 \, q
    0 ~& u! [( a/ F* I9 C  o
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    0 ?3 p+ d+ [: e3 w) h6 | 像这样。
    5 N) s4 L4 d2 M& `2 m. D. V8 }$ r% {6 g
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    ) O1 n% ^) C$ Q! R3 M0 O7 m0 G, d. p4 |% P$ F4 b% W* A
    result = re.findall(t, response.text)
    - r: W# t1 M! u返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    + w5 E( {3 y. O5 Y* `- ?0 [, i+ a) h  r; z6 _
    程序代码4 G9 [5 j3 p! D
    import requests; O% g. b  `1 m( N' f, x- Z% Z
    import re
    # a, |) z, b) H8 H  o  ]- A7 ~import os+ C6 H9 }7 `* `% h) m# X2 M

    + p5 i  q) b' F  ^& Z4 a# z- ximage = '表情包'7 m- t4 V0 _/ p' Z6 |8 ]8 x
    if not os.path.exists(image):
    4 B5 ]& }7 Q8 {' f    os.mkdir(image)/ w0 `8 x8 w( |* n* S. k7 n
    headers = {. l2 ^' R% r3 l6 T% U1 l
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    " A2 B) W: ^5 s, L    }3 y( t1 U8 p6 i, g
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)- \/ f5 u  D. d
    response.encoding = 'GBK'
    5 `$ |2 E, q6 x* d. x  Uresponse.encoding = 'utf-8'! o% c7 u* H0 ?6 P" X* _) A" ~
    print(response.request.headers)
    . @( A6 L  [3 Q2 \2 [9 B% uprint(response.status_code)
    $ t" L1 Y; I# N0 dt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'5 R) I: Q1 w# i0 ^  C) R" ^
    result = re.findall(t, response.text)
    ! q2 E& u: @9 O4 W! efor img in result:+ B) G( G- Z2 Z; N0 M* e2 A& h
        print(img)4 y6 z8 L, Y  X8 y
        res = requests.get(img[0])
    / E% m" C% P& n0 d! k    print(res.status_code)( f1 \2 z) f% J5 w8 {
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif: \* L( n8 O  s% I6 w- @9 g4 s6 i, R
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:& ~6 d9 D* `! [  F' l; _6 S; r3 d. m, C
            file.write(res.content)9 O. G6 V8 v$ W$ U! l' R9 c) V- z
    最后结果就是这个样子:
    7 N4 ~4 g: B2 @1 k" @$ Y0 M- P
    6 R- k! S  _- t$ m- H+ n5 u3 h8 }# _) v4 V
    ————————————————
    & S% Y4 B1 U$ _6 B& @" r  u, _版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    " ]8 d! A0 K0 P, _5 D原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044+ i, ~$ s" w( O1 H9 a3 J1 E
    % J; O% s1 v( R/ x* V

    3 v; J$ ~' V% M
    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 18:01 , Processed in 0.808560 second(s), 51 queries .

    回顶部