QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1995|回复: 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爬虫入门教程:爬取网页图片1 X, N: H4 _+ w& A; o

    - o: |  T( k: H$ f& [在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    4 c5 s- |( S1 K8 O$ H1 D) w% Y9 l# L! W; ]* U3 w
    准备工作: r% L( C+ d1 m# E. P  L. k& k5 @
    语言:python
    0 r# O+ E' D6 m/ @6 x! i. Y3 Z3 U# z7 X6 G4 M+ ?' k$ @7 p
    IDE:pycharm
    - v& b* ?/ T, u& m6 c. L- w5 ?  \. _
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    * t6 p5 R; ]5 p# J
    5 r& s' W( z0 J, F8 eimport requests //用于请求网页
    / K3 r% }2 I- }4 }0 S- \import re  //正则表达式,用于解析筛选网页中的信息
    # s, m- V0 [- g+ W. k其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    / E2 A# p: ~' T/ R9 h3 e
      |9 i' G( ?9 C' b4 D然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:5 O0 K$ g7 c" m) C$ t& ]8 k
    % d' C* S5 G- [! c8 e0 A/ k; P
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    * m# Z5 }6 v) p2 g6 B( y% i, W# h: Q/ _

    % u$ ^. [  R5 f0 L! _9 O% V( P8 {4 r, f1 Y) [6 B
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。1 f% d/ T) W, B" O( f
      w$ K; y5 \5 Z: J, S  o+ ?
    编写爬虫程序
    . D" X/ [. K) k4 Y7 V6 p首先肯定要通过python访问这个网站,代码如下:% D) n+ B, u2 C+ z0 y! z3 J* M- Z

    - X# [4 C: D) U; A) D( oheaders = {+ h- p/ E' b3 _* @; c/ _
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'2 P* z0 n- E3 @" _' H/ }( E2 I
        }* {7 s8 s0 `# R7 Q* O
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    2 |) Y, r% Q2 C3 k- S# v7 e其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。: u7 G6 J; q4 B! ^1 a1 z% J6 `

    6 v, ?7 U: {+ W& ]* Q$ {8 V7 f4 a8 N( v4 H7 }

    3 M5 `+ t$ p( _0 y然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:) h& J2 Q' D+ \% ?
    8 t) S9 J; o8 c: B# t

    ) C1 W9 d4 w3 X5 i1 A9 g' t# u6 B0 m2 Z/ v8 M. f
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    0 [& E8 N: _# f+ T) S  N0 w) x  t( \6 x) W  p, R
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'$ E9 f6 B: q4 E" K: b) P
    像这样。
    : j- {* A- q+ D; \' Q7 J3 a) d4 ~* ?( I$ R8 d+ ?" k- ]- H0 k
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    1 _7 V& m, n+ f1 \$ O5 H7 e3 ~3 Y' U( t  a+ Z6 u6 i  Q2 X- X( l
    result = re.findall(t, response.text)
    # {+ M8 Q5 p* H3 `- J% Z- v返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    9 S$ H( L% |4 ]! j) o
    + _) h, B% E7 M, [. u+ H程序代码% h8 V% W6 k& A  k
    import requests  H) H8 Z" _* U8 ?* ^# q1 E) B
    import re
    : d5 ]& @; A, I; w4 vimport os
    8 i& _2 X1 r4 A4 h1 c! n
    0 K& B7 k5 ]+ k! g/ f) Eimage = '表情包'
    ; ~$ k6 L- ^6 d) r% e2 ~if not os.path.exists(image):1 F2 Z/ f0 J2 H& F% ]! G
        os.mkdir(image), [' I: W7 {# Q! }" j$ x
    headers = {
    ) `' y; S0 y5 T6 A+ X; e1 _# y    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'6 B) f9 D$ I. f3 D& F% \& e' s. h
        }
    , y1 u6 ~+ }8 t, Zresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers): y% w" U  i7 h) ^. V: H9 P
    response.encoding = 'GBK'
    7 E4 z% n. @  y) g5 ~! uresponse.encoding = 'utf-8'
    ( b' U; {) A: g4 t$ F: hprint(response.request.headers)
    2 U4 h) D: {% q5 J! O: `print(response.status_code)
    ! g  o9 a, {% t- bt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
      L0 I! v* X/ Y! fresult = re.findall(t, response.text)1 \- X7 [) b4 U% P4 E0 l( u( |5 a
    for img in result:8 g7 j* F7 I& @  b+ {- O
        print(img)
    9 R6 g% [1 ]$ {' S7 R6 |% s    res = requests.get(img[0])  L! O+ ^) e+ K' l
        print(res.status_code)
    - t. r' `! T8 Z: o/ ]1 [" G0 I    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif# Z4 x9 c% W8 j# E( B  ?3 A# i
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    / q4 C& v1 n: s/ P        file.write(res.content), j; |" o  ?6 ]) |1 e. [& w! g
    最后结果就是这个样子:
    ' z" k; p" l$ m+ `. I* \" f* v) B4 {) g& X1 e( s+ W

    ( n2 [: r/ U4 |————————————————
    6 T4 O3 {; u! U0 Q( n; u版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    " t/ e2 D7 `7 ]; u- I8 q' _原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    0 p8 |; \* r4 y4 u6 Y1 p0 c. s/ t" w
      B  b4 z- m# A. K" s4 }- }
    ; ?4 g2 X4 N: y/ ?2 F
    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-10 17:26 , Processed in 0.873280 second(s), 51 queries .

    回顶部