QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2000|回复: 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爬虫入门教程:爬取网页图片
    5 i7 ^6 ^; n( z, r  l9 k4 X& a2 j8 ~8 W
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:& O! @" m( q; G! p% [$ c

    4 Z! M( k) C. J+ }! C. F- x准备工作
    4 W; @3 L% j, o" J! f9 `1 V) I, O语言:python9 {  {, p/ }( o1 A, Y6 T( @

    + y/ E+ t4 v4 e8 O1 P" t2 hIDE:pycharm
    . f5 `, f6 z8 g2 [  G
    ) n* ^; ~( z) R1 p首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    " D/ D, O- h6 V( n' ?7 J% c6 B0 W5 @9 j- @$ W/ `0 ^- Z
    import requests //用于请求网页0 F5 N! y$ Y  J& @: E  r' @. ^- }
    import re  //正则表达式,用于解析筛选网页中的信息2 b" P! b" P) U  {% @# q
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    / |; c. {3 A$ Y, O4 ]" `
    + S) m# D0 K" ~8 j然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:  n8 f! m( [. ~

    7 ^0 J$ o: W7 z! A注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。) q0 l8 k" w$ C: P
    7 S5 o0 H4 Y! }- L8 [8 Q- G
    : o, e, O+ _) j; K2 A: \# [# f
    4 J3 o& l# h1 q8 W9 J8 }
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    / |: ^7 T, Z! U8 `/ A' Z& C4 d
    - A8 [; C9 r/ U# ~编写爬虫程序
    - G5 c4 @0 `/ ~0 p" n0 W' l1 l首先肯定要通过python访问这个网站,代码如下:8 b- H  j5 W6 v; P3 {2 ]0 c* L' E

    & X* {- \. m7 b7 z  b: gheaders = {) @( s/ p9 y; }* ~) ~! B
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    # Y+ y6 m3 n" q! S3 s    }
    0 l+ b; F7 t+ ]& U% kresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页+ h/ t4 q/ q# J! V
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    6 ?6 ^. l9 q. z8 g& u% _  g$ G" ^( E
    1 p/ Q* P# {8 H% k
    $ j2 g, s0 F  |6 [( D
    $ @* H  R/ a# O: P  k然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:" P. X2 J1 s2 a0 Z; j- A& ^5 \
      }# V2 E+ j; Z. _# Q  c
    3 e) f( D; l. z! {

    ' y  m5 [' o! J. j- _ 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?8 w  f% U4 H/ t0 g; M

    " d& ^# m2 W# Q8 ct = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'* s' o: K$ z! V6 W) f5 u/ t/ l0 U
    像这样。
    $ Z1 C3 Y8 J8 o) R) i0 a
    6 ?: Q( T' D! \然后就可以调用re库里的findall方法把相关内容爬下来了:
    9 {+ Z) f. Q. R# J! u) B* Y8 F) ~6 ~7 |+ |( v
    result = re.findall(t, response.text)
    ' y) r! S" v, [& V& I2 ~4 w返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。0 U4 S6 D; m* D, c  G* ?

    , ^" [8 I. l8 n( s6 C# b4 O6 A5 O% ?  U' n程序代码
    # ^- n1 R2 Y* \! @import requests& U2 }- F" G, j: R- f; S3 `# Y6 V9 _
    import re
    - H8 C8 ^5 ?7 ~. o+ E  Kimport os
    , S+ n* w9 y9 |; {8 N. d
    8 F) B+ H/ z* n$ K6 yimage = '表情包'
    / j! A( z5 S& c. J, k; Mif not os.path.exists(image):
    " D3 i, E) I- S8 I0 Y6 \1 J    os.mkdir(image)$ M0 w$ Y: |2 t; E1 E
    headers = {/ F) W' z7 g! k
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'. {9 x8 a* X  ^, @8 S
        }
    - u: F0 H' z* c3 e# k% V! t5 \( k8 rresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
    4 S. r1 D, v% f$ q* S% I8 N: o  S/ iresponse.encoding = 'GBK'/ L6 r" l6 G" H8 g+ n
    response.encoding = 'utf-8'
    7 V7 {; X: n* y& a' E4 U2 Eprint(response.request.headers)
      C9 e3 m1 S" a4 Eprint(response.status_code)
    * F) W, t! \  x+ q4 X" Ot = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
      ?8 S: z  i* ?result = re.findall(t, response.text)
    3 M* s7 C/ m7 A4 [3 o" C: ifor img in result:& }! o8 U- `& x8 D
        print(img)
    1 R2 ~6 v, n+ y    res = requests.get(img[0])& o; I3 |# z0 R5 m  F
        print(res.status_code)& x. b7 h$ V& N/ ]
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    ; _5 ~" B3 @$ _    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    $ |6 X! _: `/ O        file.write(res.content)
    5 n& u; g" ?8 M* [, q) M$ E最后结果就是这个样子:& \' \7 e: L4 ^5 \" F

    : n$ I" N+ q2 p+ L3 g1 `
      n0 ^0 N' ^' g- l7 A( B6 ~————————————————
    ( f$ W) I; T' `8 k" G版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    7 B5 i- O$ q! |% X& ]1 i原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    ! f; g) y5 c% ^/ c1 P4 p; V
    6 ?% a) ~$ ^9 v6 t; C
    3 t/ S) p  U, w: b! 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-4-12 00:07 , Processed in 0.384794 second(s), 50 queries .

    回顶部