QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2034|回复: 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爬虫入门教程:爬取网页图片
    $ r! s8 }) U; [  C* S, M( c2 p5 B8 Y& L: [1 Y# ^. P
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    ) Y+ |! n1 {0 M9 [5 t! U/ f) b! O7 s( a' Y/ q
    准备工作! ^- U+ n) i8 @% O2 W% z! e' P
    语言:python
    " ^+ B0 o6 p9 b3 b" U8 }$ j1 n7 ~/ ]* X( J
    IDE:pycharm6 w; u0 J0 k( J5 |

    ' m  b2 N1 d- C4 [1 {5 _首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    . O3 D+ T3 x+ k5 D/ q2 I3 {8 M4 \
    import requests //用于请求网页3 a. t' ~3 D/ y3 Y5 G1 S0 C# k
    import re  //正则表达式,用于解析筛选网页中的信息- J, _6 g& f) I5 x2 S1 V4 m, q
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    , F- a' W, M2 a4 z2 j1 T/ _6 D$ D9 b1 O* u' ]
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    - k- M8 o( S9 t/ Y+ Y2 x
    ; |( @. ]7 ~/ q: j' p5 m; e& A注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    - q7 u; a: f: I0 u7 V7 [( [3 m
    : i  [: H1 Z3 o) `0 h  x5 }7 a9 u1 D! m$ U9 `& ~3 _
    ( B# }, ?4 [- e
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
      D. A8 \6 B& Y5 q
      i0 d( S8 H& s) e" t$ R7 y编写爬虫程序  x+ ]* z/ J6 z/ z0 s% e% F1 R
    首先肯定要通过python访问这个网站,代码如下:
      j1 j, [! e* q* I0 X) d; G( X- v
    headers = {
    ; q. d, F3 v- L, k; Y  [    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    * R" P& ]8 _' d: @    }9 w' X$ Q% b+ ?! B& f8 W
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页4 Q  B6 }1 x; c# m2 W9 W8 v
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。1 p; U* \0 M* ]' V7 u
    % ~3 [$ P# h6 T5 y4 z) R; {; t

    , t1 v% I* S6 m" Z! n: Q& {: y: A# y% ^3 u+ e
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:% [, f- u. U+ O
    # `; B9 u9 U5 w2 n  B
    7 _- z' Q, W# _- n# ~8 S
      x! b& L. U. {* r! F% W5 z8 Y
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?* {. H" A& E- d0 Q& b$ x. W

    " w% _) y5 M% w( }4 b2 b; x9 Dt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'# @+ I: M7 j/ O" [' O  D% I& |/ ?
    像这样。
    5 ^! p. _# F6 O, ^7 s$ _
    2 R8 `$ O, a% F! P9 Z* K5 r2 |' G9 G& W然后就可以调用re库里的findall方法把相关内容爬下来了:* V' V9 @2 [' Q0 B) T* E" @

    . {; L6 N; q0 D  Jresult = re.findall(t, response.text)
    0 s. b9 C8 c+ z: o2 e8 y- X返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    / G% T( p/ o) n. v8 o7 v) m0 m) C% X' @: R, ^
    程序代码8 |$ ~* Z# H% C5 u
    import requests9 c* V/ j* }2 o9 A7 |/ A- u& O
    import re1 C. f/ l9 x" v. o: i
    import os/ o2 E. U7 ?7 W
    6 L. y% c! s7 G% ]7 F
    image = '表情包'! r' \$ J2 v  h; h4 f! b
    if not os.path.exists(image):: i2 Z8 S' `9 y8 \
        os.mkdir(image)3 s" T. [" n' l
    headers = {
    9 y/ r3 q* k  g2 n9 ^    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    $ s8 C/ W/ ~! z* O  X    }
    : W6 M! |9 X7 P  `# L9 {+ Nresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
      F6 h* s% g+ t; K, i. ]( Q% K7 |response.encoding = 'GBK'
      _6 C5 o( n; S! M; w6 k, lresponse.encoding = 'utf-8'
    4 `) g( }2 k) p5 u( P9 Qprint(response.request.headers)2 n1 R" `# }. z7 S
    print(response.status_code)! x1 A9 E- i( m/ c
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    + O2 n2 x1 w  W& d3 C  S9 Dresult = re.findall(t, response.text)
    / P+ \: G: W" r2 N8 Yfor img in result:; U. q- W- G9 R& h) {. J6 ^0 J! c
        print(img)
    6 p# ^( U: C8 T7 ~+ P    res = requests.get(img[0])- j" x( ?, M# ~7 ?2 {
        print(res.status_code)( h) |7 U& Z; U! R4 b) ~, z3 _  G
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
      S2 t: n* B3 |# K  P    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    8 C0 H6 x5 i4 {$ a7 f' ?+ A' E        file.write(res.content)
    5 K) X% c/ N/ y* v, }% U最后结果就是这个样子:
    3 h/ K/ C. N, O, ?- H* @# [- M8 A  m4 h& c

    & `* l  r/ o2 t( C  r/ c2 N& |5 T————————————————2 S; u5 C  Q6 [' v
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    6 H+ \$ [+ ~6 Z3 L8 {: C原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690445 I! B# |8 z# F, T6 `$ l
    3 j" Y2 V/ H- V1 l. n8 c+ L
    3 P# A$ r, L9 p+ [; `; `
    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-7-28 23:30 , Processed in 0.383740 second(s), 51 queries .

    回顶部