QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1998|回复: 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& V" ]7 k" ]# x  f# @/ l, f- M3 w/ \0 S! \( n3 p3 d
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:9 }' |0 M0 b$ D5 \, M0 t

    6 G' c+ C' A* m. }- }准备工作
    0 S0 u4 x0 Z4 y! q语言:python
    . }1 O6 y. b, Q; g, c4 b5 i. |' I$ v9 S+ Q2 w
    IDE:pycharm
    # u1 X2 r0 P8 l7 \3 B$ ~
    + }& k+ D* [. Q( O首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    2 G% F  j+ P+ B" Y, N& @3 L- t! R! o  P& I
    import requests //用于请求网页
    - P3 @* Q- W( Y% B7 l! a$ \import re  //正则表达式,用于解析筛选网页中的信息% r- _3 Y) E4 V  q8 Q
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。1 p) ?& E( L+ m" C5 M. |  [7 c

    1 E! R& V. `. n* Z然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:1 I/ T6 y1 V( g5 \- v7 f) c- z9 s
    # I; E6 z4 i' }, r9 T/ C
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    6 n- \: Q" V, v/ O4 [- c1 k' D8 X
    , n7 O5 {2 |1 J! e# b# f* {  _1 w! R% C5 z8 {+ e6 ?* e) @
    4 j/ e! x1 Q2 |
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    $ K' y* D5 e6 P4 ^) o2 v" I6 y( S4 _0 L, K
    编写爬虫程序* F- ?6 c9 w6 K" M- `: ?
    首先肯定要通过python访问这个网站,代码如下:
    - y5 Q5 n- L* k' o
    0 u9 p' |9 f1 Z6 eheaders = {) n' F% n- J4 r2 s5 m
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    ; ?5 S8 ]0 r2 E7 P# Z; m" R    }
    . Y5 w6 h1 L) _! h7 _! M- iresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页& S9 i; f! X  D& f8 R
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。, f( V3 T& P- v. @
    9 J! a( \& A! {+ O, B! D* g( v) H
    " M2 M( d9 c" B2 k
    - ^. \" T  F  y1 Z8 x8 o% V" W
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:: i- X5 c: B2 h  D

    . h3 n6 ^: n. Q; G$ R) @' ?1 Z  [  ^7 ^( p, w5 d
    % `) ~6 W, g0 o/ O, |0 i
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    . N6 x1 k8 S; u. }* E
    ; p5 A' t( R% Ot = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    3 p0 W+ i) b# H 像这样。
    ( {4 q/ n% h4 v* p. e- `
      [1 u. }! t: y& ^然后就可以调用re库里的findall方法把相关内容爬下来了:+ }5 A' J8 {% k
    6 D- w: q. M/ s. d5 q- v
    result = re.findall(t, response.text)
    / A) z7 \* A% D) S5 W返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    5 T; c7 y% }3 q, s* \, i% J8 m
    ' J! I1 R" f7 s. q1 ]程序代码/ L8 n  x( Z8 W4 q
    import requests' J, [0 S+ }; J! ?/ I
    import re
    + s: c5 M; n9 b9 u. C7 T! ximport os0 r1 Z# |0 I6 R
    ; U8 Y  ~1 h! E* c6 [9 {
    image = '表情包'
    $ l2 c7 S' B" w) ^3 O. u8 Jif not os.path.exists(image):
    9 Z! d8 H1 a% |5 U    os.mkdir(image)5 D/ V5 v6 s  }9 |: P7 M4 @* y
    headers = {& b4 w# j/ M& }" \4 H/ x
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    ; W' b2 K1 Z  e. d+ |  l* P& `    }
    ! D6 V$ b5 C1 r/ S5 @: _response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  L- Y, s9 e2 u7 `  J6 S" L& _! B
    response.encoding = 'GBK': {7 d1 r5 [/ o; v* C/ _5 c
    response.encoding = 'utf-8'/ q/ ^5 k4 Z, s& J2 W1 |
    print(response.request.headers)
    $ k5 z0 l7 H- x6 n2 y  Y# Hprint(response.status_code)
    0 v' U3 h9 ]$ Mt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    & W2 g8 [, Y# _# Oresult = re.findall(t, response.text)+ y' u0 N$ C* E4 C3 H/ v& f( n7 Q
    for img in result:0 `3 z* C% L% z& ^
        print(img)3 @" K5 R1 z" G8 f9 E0 G- t6 a
        res = requests.get(img[0])5 N+ Y7 D3 h; k# E$ f. |
        print(res.status_code)
    + e  l( A9 `* x    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif4 H+ w7 m! r' i" \: @# K' t, Q0 W
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    3 D5 t+ F  F2 u+ n) h        file.write(res.content)
    4 R: g; l* a0 E) u, M5 A最后结果就是这个样子:* `- J% k6 e4 n1 `

    $ U/ T8 ]1 B8 }) H- F
    8 G4 ^! I1 R8 k————————————————
    0 Q/ i, a4 D) u) i  b版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    7 O: n6 b3 ~; e0 T. ?* ^, N原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044" c) [- P0 J2 `

    $ ?$ U. W* G6 W. L. Z4 L# O! B( f( D" g, 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-4-11 04:47 , Processed in 0.527276 second(s), 51 queries .

    回顶部