QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2040|回复: 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爬虫入门教程:爬取网页图片: g+ F; B0 C; U
    : Y2 y8 {* H* Z$ [; ?' b
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    9 V& e$ A3 r8 n# X0 a( `# F4 A; |) W8 n5 B
    准备工作* M, p* \$ e7 F# P( n0 g$ L2 ^7 v7 k
    语言:python1 \: ]$ E8 _% T! n

    # m$ j) s! D# j! Y: k# {IDE:pycharm
    + \9 L8 O$ }6 v6 A  c
    + [4 q8 O0 d9 t6 ^% v2 _' q首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    5 x$ y# M9 Q( K" D6 U" w& y$ l5 Z( a. C  U1 ~* z% x% p* M
    import requests //用于请求网页; O$ O; P" b! q! O  ~/ _
    import re  //正则表达式,用于解析筛选网页中的信息, \  a; T3 A4 m9 A) X: H& x' ]) M( ^
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。  V9 {: X5 f  u3 I* H

    ( m( X  A1 w% ~9 [: R! l然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:+ E  \$ ~. @/ \* v8 j7 A7 I
    : p7 V, Q8 J7 A9 M+ A
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。* W9 a8 b$ o2 `1 H& X. y  E
    4 f; z" P/ _$ q% |

    : Z" ^5 P( Q5 X: h6 x" @# Q/ C  ]% I$ u
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    + m! Q, I7 }  `) l+ g: p5 a* a, D$ W  n7 h
    编写爬虫程序  o& P. A: S& f# H& ?
    首先肯定要通过python访问这个网站,代码如下:
    6 M2 ~5 ^* p8 [) ], K$ Y# P# ^% A& _5 L' ~. W- H) ^
    headers = {6 I1 n8 a5 X! G& `! _4 ^  m
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'" K5 K" \0 D+ T6 h9 F' [
        }! M! X0 J. X) ^" p4 U5 m
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    ' E  G5 D+ v, e0 O& O其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    - O. K1 l0 a! g, |$ ^' D3 E
    5 r$ p  l' S$ j; B  r! y- `* U! U, Z$ ?% z& ~1 A- ]

    % e, y) x5 N$ M; h9 }* }然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    $ G& I$ D6 l7 m+ T/ @& \+ N4 ]" U. R

    ) L$ n) G$ c. p$ k1 u& A
    , c/ Y; U1 S/ k  @5 i3 P 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?& h1 Y, J# W& H
    6 Y* Q$ Z6 R/ T/ K
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    . y1 w  ]/ A$ ~6 q! X 像这样。. t" ?- i- p8 v, C' g' \1 t1 J9 m# y

    - @2 F* C6 \' c3 G% T然后就可以调用re库里的findall方法把相关内容爬下来了:
    9 {0 s0 @7 E, R8 J# E. N* V/ q9 T# R! ?# a# W; X1 M" e
    result = re.findall(t, response.text)0 `% @6 c6 r! ~8 A9 B
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。* F) Y- Q$ g8 e5 D; F
    + W- [  N+ ^3 B/ g
    程序代码/ S- X' m6 M+ d6 V$ o# s/ p
    import requests5 C9 j- K. q. j1 a% q% G
    import re  g; A. d. }9 f/ N* D6 O
    import os
    ) B# |4 V" X9 q+ A1 P$ E, ]  z( T; Z) E7 i& q2 M" m
    image = '表情包'+ ]2 G0 p( v, t6 G% ^, X0 d
    if not os.path.exists(image):- Z& a* H9 u. Z( O' ]1 W0 c
        os.mkdir(image); V1 c1 c. _0 B
    headers = {
    6 D: V. D( A( Y  i7 b    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'* w2 R3 U! p3 i& i9 K
        }
    ' \, h% N, {1 H( }( [- i2 Gresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    ( Q2 o2 o2 p* }response.encoding = 'GBK'5 y) K' Q- |  c! ?8 D7 y
    response.encoding = 'utf-8'$ K9 |" }- I, N( F; c
    print(response.request.headers)
    % m& d$ z' q! ~* o& Y( Bprint(response.status_code)
    ) V: [9 p& I& |  U+ h+ q3 Ut = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    7 U$ @4 y6 F  F! w4 \result = re.findall(t, response.text)% ^$ [; q: C+ O  y! v1 W
    for img in result:, V# ?0 N1 `7 Z. y/ X3 ~
        print(img)( Y" ^# w9 L- [  Q- t! K
        res = requests.get(img[0]); l- z- q- l, `6 b& K7 K
        print(res.status_code)9 T# d- B+ Y7 g9 l& ^6 A; c( @3 Q
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif) e$ u, Z3 O( H% y4 x9 M
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    4 k5 l0 G1 H, ?2 L        file.write(res.content)
    9 [2 Y" t' Z" b' `9 i最后结果就是这个样子:3 v6 N8 T1 ^: [7 s' v
    ' ?0 Z5 j9 [( L0 E7 [

    : R: Z, z; s9 ~# F————————————————
    ) D1 t% n2 M& o6 _4 w版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - [% m+ g! V" Q原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    6 I  j3 r3 R3 z" k5 `0 p; R4 {
    ; [: y* V4 a+ L% i" x4 X! t
    , y* Q, n/ I9 V- o  i
    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-31 09:43 , Processed in 0.522559 second(s), 51 queries .

    回顶部