QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1997|回复: 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爬虫入门教程:爬取网页图片. i. `% Z+ k3 c1 i4 i& q4 d
    % k  {/ B* N) b" h
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    ; |9 q" L( v  D+ s: g8 K2 b; U
      C' N2 `, l8 g准备工作( }) D+ s& G4 i3 L
    语言:python1 g7 `  v  ?& D- ^" u5 g
    . Z# L. V) _/ {) f  z
    IDE:pycharm) B! Q: o6 u$ b8 \5 E% P
    1 D& E$ U8 O( m* z
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    7 i7 R( h- j0 S' _( c  m7 j. G8 T7 z
    import requests //用于请求网页
    " x; Y6 L5 \& K) N$ R/ rimport re  //正则表达式,用于解析筛选网页中的信息
    , R8 F! i% W* j# y( v" P' A其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。- b( a" t/ s. P9 ~
    - ~; W3 {4 C+ k) b& X/ R0 R: Y
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:+ e7 t: e5 n, B( C

    8 J2 O/ d, g2 c# L7 e4 H: `  P注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。! _' L2 A* d5 i( T2 M
    0 j; F+ \& J/ c4 j4 y- a# I

    5 ]( T' a5 x2 d- G
    $ q1 n3 ^4 c1 V% m4 z8 G9 {, K9 z我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    3 U" C2 j; U2 m& e% E# e* r1 P* R7 X/ u0 {7 c+ w
    编写爬虫程序
    + X2 W! v8 W& n3 ^首先肯定要通过python访问这个网站,代码如下:
    " I: A0 n2 w2 e: s) W
    + x, y: r/ L0 _1 m- Uheaders = {
    ) `1 s9 g* G& E/ [    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'2 f6 \* T- e4 S: K  S! i
        }
    : k, O8 n8 [5 X, @8 k0 ]2 rresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页* z4 S9 ?. R. u4 s! w! x' K. g
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。) a: _7 B- \! d6 k. @; F
    $ u/ }% W3 N  ^9 Z  m% j, j3 B
    + f+ ~# t4 g+ d* \! O7 Z, \

    5 c1 M: U% u5 w! @- J2 C; m然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    ) u; D  J$ `9 f( U( w2 {; r- E) @/ [2 a: E7 C
    & j0 i  D" G* \) D. K- B9 }  c* |
    ( ~( W5 j7 ^* w! L
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    ! w0 b5 t0 }" \  z
    9 ]6 L  F/ i1 O5 h* p  Yt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">', u3 Z  h, e* L! F9 g" z; N# t$ `
    像这样。% }9 K, t  Q. X6 P% P
    ' a- p+ b% V, p0 r$ B) p
    然后就可以调用re库里的findall方法把相关内容爬下来了:% z' W6 c" O* @% C% _5 e9 K

    $ o6 s8 R  f& f& J, c/ kresult = re.findall(t, response.text)  }" K8 X5 e: `
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。7 S( Q5 T" J/ v, [3 w4 J
    + |) {' ~6 a( d6 F* z
    程序代码
    ! b$ |# Y* W3 x; Aimport requests
    * z) [1 Q- h4 ^0 H1 Iimport re
    0 O5 y9 K/ r9 I) U: V6 Wimport os0 ^% Y+ {% L1 v

    + t0 {3 V$ H/ d5 I3 d' Y2 y2 o4 eimage = '表情包'0 a4 t7 [% q& s; G- ?" G7 S+ c
    if not os.path.exists(image):
    2 w% c! e4 B) g! ~9 D    os.mkdir(image)
    # H1 A* \  f  I5 rheaders = {
    % |9 Y  q% \7 H: a    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    9 V4 m2 p  ~3 k5 ^) B    }0 L8 i$ q7 d- r) u
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
      \: u9 u9 D+ T5 M' B0 U# L  Q. uresponse.encoding = 'GBK': g2 k$ _' u* E, l
    response.encoding = 'utf-8'
    . _9 T/ C1 Y, i/ |; n- B: Aprint(response.request.headers)
    $ v0 w1 p- B) _: g& _. j, C- P' M" Xprint(response.status_code)
    ; H# l! q# X2 g; U( j5 ht = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'; g2 H8 x/ ^0 O8 I3 R8 c9 p% W' R7 r
    result = re.findall(t, response.text)
    % s* B! G' A! N/ N/ A# w/ }. Yfor img in result:
    8 G& v" e1 ^7 p' \6 e; t% k; K    print(img)/ p) ]/ p! P  l0 z
        res = requests.get(img[0])
    ) a; j) x# _1 z2 K    print(res.status_code)" |3 r: W) F5 d6 p+ W% p. v; M
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif8 A; u9 i6 H6 J
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    " m& _, \# \+ Z, e# v        file.write(res.content), F! K$ V& G- h
    最后结果就是这个样子:/ n7 H' K( z$ {* C- \+ j! e
    " h4 S  |3 J& O/ ~2 [  |' @' w
    ( H8 W  W7 R$ j- I
    ————————————————9 Q$ ~: |$ V" K& Z+ [
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。  X" V( x0 u8 @
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    2 i6 v' L& E4 O* ]9 W# f( _5 h) N& ?0 I6 ^0 ^% P! L8 {
    6 P- w9 g2 m/ j- v/ Y$ v
    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-11 04:25 , Processed in 0.313782 second(s), 51 queries .

    回顶部