QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2018|回复: 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爬虫入门教程:爬取网页图片+ }. }  s4 \0 O3 y% Q3 h8 Q% O

      U* f( E8 d/ E在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    * p: j8 ]5 v2 J7 _. F+ B, s9 ?) T2 \: }: f" {7 o0 s
    准备工作
    / R& Y0 I. U% q' L4 L. ]语言:python
    % x9 N! X( g" z0 q8 s% T2 W. ?5 I3 G- [/ K' I8 s
    IDE:pycharm/ J2 N7 ^$ c$ [0 h% K. t- e( P
    - |3 a% X, @- ?- u+ d6 \
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
    ; U. ]# |+ d' N
    ) `) T& E" X  jimport requests //用于请求网页
    ' |. W, [4 s0 |import re  //正则表达式,用于解析筛选网页中的信息
    * X& A  u; U" z3 Q7 _, ~6 k其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。$ r6 d6 g  R1 h4 H$ A6 }/ T; |8 ~0 Q
    - b+ r& R1 J5 i9 F
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:3 ^2 `1 {3 v! I2 g) Y
    ' U' \2 t& s! F' o. S& L
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。& d8 K: x. H/ Q. c
    . M( \; {6 Q- c. N

    2 O9 c1 C" [/ h- f6 p* |+ ]9 B4 {1 M+ M) u
    我们要做的就是通过爬虫把这些表情包下载到我们电脑里。- R5 j8 h* s+ H# r

    * b% c8 o5 I4 S* C- a编写爬虫程序
    9 Q3 @: D, _# ?6 V0 n$ S首先肯定要通过python访问这个网站,代码如下:9 t1 ^7 x: `- k; p$ B: s- Q
    - r! a. t7 a( @& R( F1 w4 w' ^! U
    headers = {% \* Z0 T, Z* i, s: g, D! N6 D
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'" g: _' T1 T7 R, d8 e
        }
    ! n' j$ r2 i' L8 a3 z- Fresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    - C  i( W4 x7 P# M. F其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。+ E3 e6 u2 K1 C; C& y% c: P

    - ~' S4 d9 T' [3 N3 y7 ?, Y+ d# w8 ?+ j
    5 S( B& `; c* l! _1 U  m
    , B/ D, a1 u' y7 h; @& j8 z然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    " [9 \9 ?, [1 x1 F1 v$ I: H
    ; E8 L; R4 Y  A
    ' \# ~! U& }2 X8 }# H0 h0 M! ]4 @+ R. R
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?4 {; J: A3 z# C; I7 U8 C3 e( }8 v

    $ ]! a' B/ ]" X3 Lt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    + U# l. y( X0 K% E; O 像这样。
    : ~! k3 V+ `) J0 q) y5 g* b) ^% O+ ^; p
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    3 e8 x; i7 K2 [- _# F$ z2 q' _) L" c) z' j+ P% I' i( I+ O
    result = re.findall(t, response.text)
    % H7 n3 K# Q) p9 q返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    $ c7 \8 w; y' e- V9 w/ E! u+ c9 T2 `/ Q
    程序代码
    7 ]7 j7 N( G/ A% n- s9 ?$ J& E3 w5 ximport requests+ F( }, d! Q; n6 h
    import re
    0 [2 }, X) l' K+ o2 @import os
    1 ~0 b9 w0 s, S5 f+ H# `3 \& e# n' p9 ^/ N2 y& a) z$ B; w
    image = '表情包'
    % w( d0 h' h0 V/ M) Mif not os.path.exists(image):
    % {) W; \8 {0 S3 ~; G9 u5 s0 B% L    os.mkdir(image)5 G8 A& p6 d, Y
    headers = {
    ! E& ~; d3 Z8 D4 I) _% q- u    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    & M" \2 j& O; i7 c" ^    }  y/ h1 s" {* N0 @' E9 x! v) m0 [
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)$ S5 h# W9 d' J
    response.encoding = 'GBK'
    / H6 H7 m5 k5 x, U! }$ V; m0 f- }response.encoding = 'utf-8'
    : \) V- U8 s. n3 W+ Hprint(response.request.headers)
    ( S3 c" P5 \! U) l2 Z" P) e: Zprint(response.status_code)
    + P& O* w* P2 J; [' J- `t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    . j3 J% e6 |4 p4 e; {2 [. Gresult = re.findall(t, response.text)! o/ g/ G# x. n
    for img in result:
    3 ^: P) [  z7 n, e$ e3 w0 `    print(img)) q: F/ i3 g/ K& v0 S
        res = requests.get(img[0])
    3 o5 k" l; k; P$ B' Y; a+ ?    print(res.status_code)
    % K  m' _( O6 _    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif6 M2 G4 E2 D: U5 j# r# ~% S
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    % O2 \" D- X3 b: Q2 q        file.write(res.content)/ f* y3 F) Z# k8 G
    最后结果就是这个样子:; \+ R& T  o0 `) d$ |# Y2 b* z
    , r7 C3 O# l" T4 o5 E! N2 S+ m

    - \4 z2 z. M. D3 E$ f————————————————- F/ g: f0 k- l9 t# L# w
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    / q- R8 ?" q7 s! V' z原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044* a5 J# T: y* J1 ~7 h7 m# q; F' W! m

    ! H, f5 x/ Y9 @5 p$ E$ ]9 H6 m- ]( z  w3 |; ?
    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 20:12 , Processed in 0.412369 second(s), 51 queries .

    回顶部