QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2013|回复: 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 R- W3 D' G9 W4 J. s! O

    9 ?2 y$ p2 ^; x$ P" X6 r3 P& _- W/ N在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    $ l- Z4 I8 \% o* x' y* F! }5 i" r* s# X
    准备工作! n3 X' S0 A: h( F! P# K
    语言:python; L) F" z' N1 e  b& o

    . m8 s9 j. r& [3 c3 C0 J# U" eIDE:pycharm. z1 F! C/ W; E8 \! L7 |" o2 B
    8 a$ o5 ]) ]$ p" i
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    0 C( w% {, F* Z8 f+ x% u, A  K  ^* v; R8 H7 ~
    import requests //用于请求网页
    ! a0 |& ?% Y) m3 K7 gimport re  //正则表达式,用于解析筛选网页中的信息4 i$ r3 [: w+ e. ]" u, j
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    + _1 [2 _$ z# V! v; h" I  p' R$ }) S# D+ g1 Y& H3 f0 D5 h
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    " D4 {- k% \, J9 H2 l' e- {
    $ L0 x9 H9 G% f. {" o$ N; ^  ~注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。* N1 P, l# }2 a7 S! q0 p
    ( ~& T# w+ ~. }8 A& S; w, r. ~. _
    9 \3 p7 W% e. C5 [0 _7 r" D

    1 W" e3 ?9 Y1 V我们要做的就是通过爬虫把这些表情包下载到我们电脑里。* V, h( f6 V: a. A' C

    8 h# M1 U- I% |编写爬虫程序; t$ Z, ~5 c8 n/ M  N) |0 V/ r
    首先肯定要通过python访问这个网站,代码如下:# F% ]- O7 ]3 r: u  _
    $ m2 {! d+ ]  r: ]/ t8 d
    headers = {: [! P! Z8 c* c+ A& W. n
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    ! C( O" d# k! B* t# y    }
    ) L/ Q& n9 W$ E  x1 n0 Qresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    * }* P( B/ n$ q/ |& n& q# l其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    / M  r8 E) o5 T6 `: G$ ?
    : F  }3 x1 m. g' M' h
    - G9 U9 e$ s) d6 \# t' d% K* c
    ( g+ q- D( P' g5 o3 M" Y7 N3 m然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    . L) g+ r! c& h' B( V9 h/ j3 j% p+ |, [3 Q
    : t" X$ O* z% w5 m; c" O! j

    7 `3 T8 V8 [, }% Y 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?5 U8 X5 t' O5 Q9 @) u

    $ Q; \; L( `7 ~: s! X- t- dt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'( U" s, u$ ~( e' Y0 w9 Z& w
    像这样。
    . B  j- I$ s1 V* V# o* R% W5 A/ @8 N: a  T& }
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    - M: x6 r) A7 L! F" F$ e* h
    . L, P3 H% W+ L9 S6 W* mresult = re.findall(t, response.text)+ E2 [) M5 O* P1 g1 I  r, ~
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。0 H$ c# h/ @8 U& S. v
    $ P: q! t, {0 O5 m
    程序代码
    7 G& m% |& S+ ~  L8 B- pimport requests* d6 |0 N2 V; I# S/ \% R0 X
    import re
    $ p+ `) S' b% Aimport os$ |# D7 U: T+ N1 ]' K; h

    6 N( d, C" |& c% [4 M' b7 o$ uimage = '表情包'( b( o1 H0 X& g2 ]+ J, T9 t! d# K
    if not os.path.exists(image):/ B5 I0 }+ M4 z
        os.mkdir(image)$ j* q6 J. g6 p# C( w; q) P
    headers = {8 H1 q+ b3 E" m" \$ i9 b' O# a! u( a
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    / D' o- }7 g) y    }
    2 l" D0 ~' L5 T5 Z4 Kresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)* O4 c$ n+ q" K- [9 t9 a9 q: F  N
    response.encoding = 'GBK'
    & t# t7 m6 A8 ], d1 q# K, a8 _response.encoding = 'utf-8'
    9 A- ~3 }% a' Xprint(response.request.headers)
    . f  D" o6 v7 f- M, b1 fprint(response.status_code), d1 o5 @& r( }8 k6 g
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    ; l& E1 L# Z; e$ E% vresult = re.findall(t, response.text)
    . N9 e0 A: c  x+ k( E7 ^for img in result:
    $ @6 V, o0 ]* z1 W4 ~    print(img)
    9 L' T' M3 {0 Z2 M3 B    res = requests.get(img[0])4 P+ ~/ ]3 t0 C5 H2 e: i$ c: Z5 |
        print(res.status_code)
    0 O# `8 ]' [4 w; z: f    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif% c% w. p( Z; \, Z+ F
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    8 P1 H; ?# ~" a6 r2 Z- i        file.write(res.content)" o2 k" P3 x6 h1 f! x1 n* r# Q- u
    最后结果就是这个样子:5 W8 N) E# R1 `; p- c
    2 v1 \; V& x5 j. g4 C' X
    4 R( D- Y% K8 x9 I3 K; s8 f
    ————————————————5 n8 B8 F. Y5 J
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& x' E$ [; c- E: D' K! L& ]
    原文链接:https://blog.csdn.net/qq_46145027/article/details/1239690441 x9 F+ M3 G- o6 h* ^
    , G! a9 g! S& r3 R- E- B  j

    % g, g* |: B/ y3 B% F; H6 A
    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 16:53 , Processed in 0.414547 second(s), 51 queries .

    回顶部