QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2033|回复: 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爬虫入门教程:爬取网页图片
    0 _; P* G2 U" ~) _/ L* @. U. }5 k4 K
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:% p* }* O$ b8 \# `! k, w

    8 p$ ^1 p7 x& ~' I# y/ l  W, {: d; ]准备工作
    3 V+ Q2 N/ g7 S; v$ H1 N语言:python
      i9 D, i  Z& r% r6 M2 f
    , @! A% U9 Q5 F! S4 z) V- d6 n( w2 {: IIDE:pycharm
    * H+ q$ ^( k% n& L* J4 X+ q9 n3 l- B' K4 o; @: z
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:; |" y* w, O+ u5 G
    . W3 x, g3 O# ~0 w8 B! C0 S
    import requests //用于请求网页: \4 B3 |0 e" E5 e# k  e2 o
    import re  //正则表达式,用于解析筛选网页中的信息
    , j9 V: @, ]* y其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    # d  p4 V& q- f& e4 {* @: _0 \1 u; j' m' E# z/ H7 e; D
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:# B: P& k; Z) R6 K# x
    ! J7 k' n: A. `1 Q5 k; [- e( i$ s
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。1 n2 U) M& G" O# O( Z) n% R

    ) |" k8 |& x( b# G, d3 |6 ^& r. U; i; V. g$ G5 R6 K
    ! }& N. y, h8 M7 a+ Q/ j5 Y9 [7 m
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    $ r% {( C9 G1 a5 j, P0 T' s
    % j3 @  R1 h/ @  x1 d/ Y编写爬虫程序- U7 E9 \" `& h5 T+ {
    首先肯定要通过python访问这个网站,代码如下:' S/ i) u* L0 h, }$ V
      b4 ]6 s# J. R, L1 p4 j( H
    headers = {
    ' j5 }& w" [9 ]( P    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0': \) R4 d$ V! b1 R' p
        }4 m, Q4 M- ~( P4 x' }) R* i
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页1 x/ Q5 I. q6 |+ n( w1 O! P: C
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。- E; ^7 g, h: L( \
    ) E- J2 M; H, D; g% O; z; P

    1 |$ A* E9 V  s# x- w0 n* y: s
    . M0 Y$ N4 a' }) K! j3 ~: I然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:9 D! S; `, O* _# H8 G
    " x7 e% T% r7 D( T" g
    4 g7 T7 B4 |* |% N* X

    ; ~' T; z/ X# C0 a& b0 `% r# P" Z 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    1 i5 j2 [  U, F9 G0 L/ x1 o- y% L4 r" R5 g
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'6 a! ^4 V  y0 p* Y6 k6 X% |
    像这样。
    % M0 {) s9 J% P! R6 N7 |. `7 z% h/ Q  B6 U# |3 o$ p
    然后就可以调用re库里的findall方法把相关内容爬下来了:+ N+ y' b1 W% t+ D8 N* B! {

    1 e$ J8 Q5 ?! r; W( rresult = re.findall(t, response.text)
    " v( V$ E1 L% H# N+ G; N) N返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    ; I0 f/ g% D- b$ X# Z" J
    * h. I8 `! Z" l7 `+ G# A3 G程序代码6 _5 W/ v) ]) n0 h0 g
    import requests# E+ G. F, B- K. L  M0 V
    import re. Q, I1 p, j+ b# @; E; D; q
    import os/ r4 X0 d+ l% K+ f4 j

    ( d% o8 p& ]0 Oimage = '表情包'
    ! m0 s1 G7 R8 gif not os.path.exists(image):# d% h  b" w; X" l" J
        os.mkdir(image)
    $ l; R( n6 ~: c7 y. h0 Eheaders = {
    " u9 n+ ~# o5 I$ `& @$ ~2 B( O    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    9 M0 E! z1 t% p8 n0 v4 u2 |1 W    }2 `8 f6 ^3 A8 ~
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)) |$ y! e/ M0 I
    response.encoding = 'GBK'
    3 k. v, q+ e9 F0 G) t* o  ^( ^response.encoding = 'utf-8'
    " i4 u1 C, Y0 \1 o4 P- fprint(response.request.headers)
    # s' k& _$ g1 F( u8 b, `5 Yprint(response.status_code)
    , h0 R' s- c* W) P- wt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    * ~# |& P) A9 E5 ]# P7 L5 uresult = re.findall(t, response.text)
    5 ]4 M' l' ^  C2 W; tfor img in result:" x( X/ G* w, ^0 ]: ~2 f
        print(img)
    , K6 Y! |" d5 e% B3 P$ Z    res = requests.get(img[0])
    " {+ I5 }1 R& @! I7 B4 @; e: O    print(res.status_code)
    1 k+ H. s( L2 f$ o- Z* H; e4 }    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif# L) y7 H' _& q3 a! A8 J6 t8 o5 ~
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:$ X' j$ `' r* ?% ^) b! s1 I6 U
            file.write(res.content)( G4 I: w- U7 `& d( j( {. @- E
    最后结果就是这个样子:8 c* w; l, i# o6 v! j* ~

    / ^$ r* L, V" T9 C& V) _5 F7 a& |
    1 v0 d% o5 h$ M. `( h————————————————- Q6 _) F" E: |7 o! r, `
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ; }+ J/ o" g$ K& Z原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690447 i- Z; X& J- ~. m: h8 U
    % p; K" q- d) Q/ n! _

    * s$ |" O! r& D6 a# [9 Y; W
    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 17:04 , Processed in 0.403168 second(s), 50 queries .

    回顶部