QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2039|回复: 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爬虫入门教程:爬取网页图片
    $ _+ ]6 Z/ t% d9 V5 l, Q2 ]
    6 m( \4 e$ W. z在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
      Z. J# g! C2 n, [6 @
      a7 Q1 b- I4 U+ x准备工作  [' }' ]* _- J2 K2 Z6 v6 f
    语言:python
    / Z4 x. i& h" ?7 Q+ ^
    - q& x$ ?8 W" c6 d1 d8 D, \IDE:pycharm
    " R. H9 W3 m/ E. W# G3 r/ d* o" R* s8 v
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    ) L0 E8 D( e, H- f; r" |$ {6 q) P
      }$ F3 j9 n7 n- ]: U) Qimport requests //用于请求网页
    0 C4 t: c9 O' M3 z  Qimport re  //正则表达式,用于解析筛选网页中的信息
    $ t7 `: d* c8 l其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。, B# B8 p; F- h0 }6 `) K
    ( N6 c2 n& W, ^* x  D) |% k! G+ G
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    & y8 O. P- }7 ?& I7 `
      ~, }4 A6 e; x4 P2 ]! b9 f注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    : S4 L9 N( ^1 [+ `( g/ y
    . {8 j) B2 @% w7 G
    7 H: g0 }+ C9 d; a: n# A& }
    " a/ X& h9 ^) q我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    1 U9 |" U% q. T. S5 ?) d
    , G( [3 g6 Q* I( g, Y' b6 }% z编写爬虫程序
    3 t, ~! k( I! |( [/ L首先肯定要通过python访问这个网站,代码如下:* P4 F. Y9 j4 B

    * Y( r8 [- s$ A7 x  p9 Pheaders = {/ s5 B% q7 R' f* _* i
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    $ Q) @$ j% E! Y2 d; `) g. P    }
    0 y/ ~3 ~, @, |response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页/ S/ z% H5 c0 Q9 ~7 k" K* I9 G
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    3 f, K  s- |5 `5 d. A
    - f0 ~; r" U# ^# \0 t0 F
    / G$ L! o/ R7 E* m$ |( g# C& R; ^" b3 z! p7 f5 M1 G3 E& c! w
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    8 j9 B7 @, o6 I- Z8 A
    7 }# e' B8 w% W" A
    6 x* A! p& d8 U* h. m5 r# H2 W( }  J. J3 w. G, H/ L
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    ; x# I8 Y6 H. p9 j6 c5 j! P  A
    $ q0 S# d4 H4 a5 i* Ut = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'  J' K  c1 @$ y; T# X# D
    像这样。4 }, U  K6 T7 d7 G* a$ u4 j
    5 d" a% b6 K1 U1 s; l- X
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    5 A# e1 Q+ b; a' M3 i
    ' P5 k0 L: c% Nresult = re.findall(t, response.text)
    6 Q: D& \/ }, p5 m返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。. H- `+ M3 Q3 \4 s6 e) G8 c/ @* T

    - p* D) J& h9 N2 B; H6 V5 T程序代码
    7 k. D0 X3 o1 ]. [; r7 rimport requests, f0 g9 Y2 D7 X( |4 k9 Q9 O$ y
    import re
    6 P0 P# d* [# |2 C* g* Oimport os
    7 s$ A2 \* X0 e, k3 ?
    ! K4 l- V% Y% l7 ~image = '表情包'" x! u3 w% C& D
    if not os.path.exists(image):0 O& e. i3 w' d3 H! [+ B
        os.mkdir(image)
    ' k$ I% W3 j0 Oheaders = {
    4 i& j* r" T3 c    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    : |2 p3 m4 N7 b% v! p    }9 s" Z+ V( x! d0 q1 [' k
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    $ `8 {& s0 U9 e$ l) }* a7 y- |response.encoding = 'GBK'
    ! s! H5 U1 q1 C; y  C! \. zresponse.encoding = 'utf-8'
      i' F. P) M* [9 w& aprint(response.request.headers)- k- w, x( X; x
    print(response.status_code)
    ! R$ N, H( d# t* N+ w0 I8 Wt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'( @/ m4 L  _- z0 U* K1 i* k8 n2 s
    result = re.findall(t, response.text)1 \1 C' G# e7 X9 J/ c' r
    for img in result:
    & r5 }& [3 l1 u# y" i) \: a    print(img)
    9 m2 x7 J& x; H! }) D! Z/ ^    res = requests.get(img[0])
    % Z" \) K" q2 t! [+ k    print(res.status_code)4 K& ~7 ]6 y& D' s' ^/ d3 ^" J1 x
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    ; n  F5 ]# r' l0 [9 d- S    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    6 u0 F/ d. X- b        file.write(res.content)
    + [+ y# \; ]" `最后结果就是这个样子:! Z5 P5 b* c5 }5 c: c- i

    ' @; a) k; A. r2 O3 d( ]
    $ R2 T+ I2 t4 l- n————————————————
    % l1 {7 T5 P2 a/ ^, B版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' i* z$ ~- U1 V
    原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690444 c5 Q! e) Z( I
    ! `. o; X3 m; a: `+ x3 Q
    " d* B: `8 h  R; `; d5 {
    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-30 12:41 , Processed in 0.320101 second(s), 50 queries .

    回顶部