QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2016|回复: 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' m- H# }6 n6 F; @0 ]0 O! v
    , N; C' p4 H) m在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:& P$ E% t8 M0 U2 o. p

    & B* M6 t( z6 w: k准备工作5 L/ T' ~' p! V, p
    语言:python
    : I( ]' A' q. V9 e2 T. ~% h; g: F3 x
    IDE:pycharm
    ! w# K1 W6 h0 o9 a  E% i9 E' f* \# Z5 R1 B* |5 e
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    8 b9 w6 `, q2 {1 ]/ ?8 _, G/ }. ?7 H& H% w
    import requests //用于请求网页
    $ ?, `* W  c4 [6 @1 h6 I* ^import re  //正则表达式,用于解析筛选网页中的信息
    # u7 u5 R. r3 V& r5 ~% P# Q' s其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    # u0 j1 \0 l0 h$ G$ x& ?' e
    # l& J% `" i: g, K, @然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    9 n$ p  M3 j2 j, t5 \0 B; R1 U2 s9 A0 }8 K- A! e
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。) Z- B5 M( y2 K+ p! w

    0 f# H5 L: T6 H0 H5 l: l( B
    ; B: ^7 K5 P) ~( l- n8 O. {2 s) V5 T
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    * e5 S) W- e- S$ M( f
    & F, c5 n- J& ]8 S' e3 g, f9 M编写爬虫程序
    . v9 z! S: }3 Y1 a首先肯定要通过python访问这个网站,代码如下:9 B5 K8 B6 r- F2 M
    5 q  S" i' x' f0 Y# S1 M( E
    headers = {& u  J1 N; z- Q3 ^% ?+ a9 u8 a0 T
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'0 ?: u6 M9 j3 w7 o2 Y4 P% W1 n
        }1 b( R) u" N9 D% R
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    3 s/ P5 [) e+ S0 g) U( E% x其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    " L5 O, ?1 y- d' m
    2 ?0 ]; h) w% Q: a* L
    $ f/ |6 @, r6 t
    2 H% k1 N4 e1 r然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:: v. @& n! K$ l. [) |& G& g

      z: F4 G+ l& c- t- q
    : D6 C, u( w% F. w6 t# V) U  x0 u8 W4 n( U7 D" Q0 |
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?7 A. N/ g8 _8 L1 p( a

    ) u# q5 j0 I: o- \0 Ot = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'# |1 U8 z) D; @0 |: G2 a3 L
    像这样。
    ! B5 Y9 L% }0 H1 z( a3 P, j/ i) N% a9 i# Z6 S
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    ! L% f, L+ S1 y2 s  \; e
    ( T7 J" i6 n& A$ k  bresult = re.findall(t, response.text)" v/ R8 Z6 U3 [" [/ M8 W# K" o& W
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    2 `' D% y( Y% |6 q; }7 x
    5 g6 \6 Q- a" L# d程序代码; N1 g. b$ P9 S  X) x% R$ x3 T
    import requests7 _: i( {( f4 `' U* h
    import re
    . P3 X. B) ~' C) ?& jimport os! s  b- c7 _4 U4 x6 j2 V/ M

    ; {% R' `, `1 c' J3 J: [& k# Nimage = '表情包'
    4 u4 ^# M- L2 B( h; Mif not os.path.exists(image):4 [1 E" x- H9 N1 P, @
        os.mkdir(image)" d: i" n1 j: U/ b
    headers = {
    7 Y- f/ O, z7 P/ q1 ?    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'4 w* y7 w  |, A3 T7 o, [# b7 }/ r
        }5 X% Z' ^" k0 L6 {
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    4 d$ z4 T% [' X5 D6 W# i5 qresponse.encoding = 'GBK'
    ) _; F2 S) ?3 Q8 p; \: mresponse.encoding = 'utf-8'
    8 S( t4 K8 X7 |6 V4 J7 d" Dprint(response.request.headers)
    3 d2 \- x3 _- q2 c6 p5 [/ o/ z4 Qprint(response.status_code)% ?5 U* U! B$ ^. u0 z) s9 ~- ~
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'* E6 K* s) a' j% R
    result = re.findall(t, response.text)+ V3 Z, ]# s7 b- p. W
    for img in result:, g+ c/ Q- h# p% L* g4 c6 y( i
        print(img)
    % [5 C: `. J0 j; d: p    res = requests.get(img[0])
    3 o' T- y1 N8 y; Z6 o$ w; b3 J    print(res.status_code)
    # Q* ~0 m- W* d9 c5 v9 [    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    4 j' n' |- w- k* D    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:! C# N# z  d0 a( ~7 T
            file.write(res.content)9 @& U$ b% j" ]' d) q
    最后结果就是这个样子:/ s* S- \& J; r- y3 M6 s. c
    ' \7 k" E9 y3 i( ?/ a$ Z

    5 R4 B! M0 n1 c4 U' G5 ^8 t0 H$ C————————————————  Z, a, K, d6 J  u/ s! e
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ @; h5 |/ \, v) h2 l
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    6 @- y5 f1 O% h  o
    2 b. ?) U/ g. c( H' J7 V- {$ q7 \% T
    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-5-30 19:09 , Processed in 4.645795 second(s), 50 queries .

    回顶部