QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2064|回复: 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 K8 w( T% W( Z) p$ q9 v

    3 f$ ?7 j" U! p: E在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    0 F  F5 h/ d) Q9 {2 w
    , r5 D% E7 H: X# v* y* d  G4 Z准备工作
    9 P+ q0 x4 z9 Q. P语言:python
      I* P& }9 b, A  l) ^/ t
    - M% @+ }0 x2 `9 D8 sIDE:pycharm
    9 |0 P% u: M7 I8 y9 q7 b
    # G7 A1 C) h5 c* o4 M首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:* o3 C, T3 h, {& b8 N  K9 U
    & p/ Z, z. N1 w% H
    import requests //用于请求网页
    5 b1 R( K8 x6 Kimport re  //正则表达式,用于解析筛选网页中的信息
    . d9 j" j2 z( O其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    , J' y' F+ \4 y
    4 ]9 e1 B! |, @9 P: a然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    0 k. \% p. Z: z2 X0 g$ q( F
    1 i; T- g8 \  D6 c; i5 o( A注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    - J: A1 i# i1 S" }  r. \* y6 i$ m$ }

    7 \3 K+ I" Z. U! y
    , k! g% Q  n5 w) G  B, B) L我们要做的就是通过爬虫把这些表情包下载到我们电脑里。& K) m8 L- {' h/ @1 G8 W+ ]% |
    3 X8 s9 ~  w& i( v1 T: O7 ]
    编写爬虫程序' {5 @8 `: P9 j/ u. y
    首先肯定要通过python访问这个网站,代码如下:. d1 H4 B' c: R' r: y
    & s( X! \4 N  D% b! x% ]- U3 a
    headers = {
    ( y1 s/ C" K7 ]3 L    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    3 J9 V0 G* l4 u2 {3 [& T. O    }- Q1 c2 m& L  f% v$ V8 ^% d% j
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页$ [9 Y8 ~; K7 B( G0 u7 g* b/ N1 c
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    0 w. q' N( Y& L+ E9 C: K. u, H
    1 Q' \4 b6 @. N$ V3 `0 t* m' H( m3 P  Q  n& l7 @
    & Q( s- H- u$ |3 m2 s
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    / o# S2 _, i  \- g' p# n& o1 o  u8 q0 B9 X# D
    0 `& w& g9 y- V  _0 H+ m5 `  R, q6 B

    1 n& ?% o/ ?- ^* u& I 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?$ m: Q3 b* d. O9 J2 H
    8 Q4 s/ Y. }% g# _% a. i2 S
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    % n( c9 R# Z) h% {$ E  J3 S 像这样。
    " ?% c% K, q9 b7 }) t2 Y. K) T9 L" p, t- r" c) i. S. q2 W0 s( `
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    1 Y$ g8 v5 B  z- k, B  ^# ~8 D7 E2 v: Q* {
    result = re.findall(t, response.text)
    ' L. w" z3 @# @. p4 d$ h返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    - u* k& a4 M7 J1 `& b
    + n$ N4 R2 _1 Y. ^7 m6 m& g8 t程序代码) x4 g# U1 B# U/ K7 A! P  z9 Z
    import requests% s% |) h; g% w
    import re
    , T2 j+ P" D9 @9 q) g: limport os
    / h5 _, n( b1 v4 q' R
    & `( a7 j: B; l' z5 Cimage = '表情包'5 d; }8 l0 p" n4 k7 O
    if not os.path.exists(image):0 V; T# t- x3 h  {3 x
        os.mkdir(image)' B$ o! C7 g: W2 z! Q1 s" d, \
    headers = {
    $ x0 E2 f* L4 o0 D# x    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'0 W) V& G9 b+ t6 |! z/ ]
        }6 [. V2 m" k$ f' k$ C+ L) y
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)! _; U# E1 l+ c( w; s8 v. o3 [" U
    response.encoding = 'GBK'
    ' `5 l- \5 s) Fresponse.encoding = 'utf-8'
    0 S' t, ~0 ]& vprint(response.request.headers)9 |( E* k% x+ x& `4 r) Q
    print(response.status_code)
    & ]+ F& m5 L- Z: k; bt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    ; D( h( N, J2 ?5 k: l3 \/ dresult = re.findall(t, response.text)
    4 L5 N  a# [" H: f3 Ofor img in result:9 u) _( V3 W1 h5 \* |
        print(img). Z/ g' x  W0 ^: K& B7 z
        res = requests.get(img[0])
    / k! }: g* M0 C: H% @8 N    print(res.status_code)
    3 [/ g$ U9 M& O3 R9 ?0 T# S    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    . H$ g2 _& A2 F8 U% M6 D    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    ' i, ]1 }) Q+ }& P, Z5 }# m2 ]$ E        file.write(res.content)
    + p5 E5 M5 \1 M0 F- }" ^最后结果就是这个样子:7 {! c) v! u. z0 |

    ) r+ b1 w' ?" F# i$ X7 b; h" M, Y% x3 R* K" x8 A! {9 ]
    ————————————————
    3 U6 n9 K+ X# Q, `  K  ^版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ; }& z- J0 r/ ^7 C1 k: u原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044# s( N! b6 z# t+ G" x

    # [0 x: H1 v# l+ W1 E6 W; ^7 {. P  M4 c) H
    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-9-13 19:21 , Processed in 0.404123 second(s), 51 queries .

    回顶部