QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2037|回复: 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爬虫入门教程:爬取网页图片8 j" R- y6 A( }: H$ ?1 W6 B# f# f

    " \) L$ S& {1 I  W! E% m! }在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
    & q& t* ^  c# Q  N& c' o& ]0 b8 {* g. @1 V( K3 _
    准备工作3 o1 R/ g; V  L& o/ R, V
    语言:python
    + I5 k) G6 j8 e0 \
    4 h5 l0 R2 h5 Y" rIDE:pycharm$ B- |# y% \  B2 O) g+ l" V$ h$ N8 y

    1 Z$ }2 i' [! k' V4 a1 q) s首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:7 K3 X3 T3 W! ~+ k/ v/ f- q3 I
    1 W" w- Y% z! o9 l8 ?
    import requests //用于请求网页
    $ U  Y+ r4 a, @, t+ q; G2 G: Wimport re  //正则表达式,用于解析筛选网页中的信息+ {/ B7 J" Q; n* R* x4 ^
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。1 w3 q' C* o7 g
    " ]: e/ L# X- A2 l8 v( v
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    ) q  A: j5 ?& t$ h; G. l4 g
    * {' @0 H2 x, P! K$ ^# ^注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。0 {- ^( A; f9 F8 s
    + G7 I9 g' G$ v4 T9 }

    7 J6 v1 D, x$ z" {! F
    4 j0 B- F  Y, L. t' G我们要做的就是通过爬虫把这些表情包下载到我们电脑里。* b- U$ S. Y/ G+ G1 l
    : x* ?; s) S/ q! u: u5 X
    编写爬虫程序
    ' J5 D6 L# l# Y$ z1 \$ X( s$ A; d首先肯定要通过python访问这个网站,代码如下:8 I( m4 l; ^* B! C" ?4 b
    + N( Z, k9 \7 O
    headers = {
    9 [, c8 r5 a0 q! Z    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'( O* R5 i4 M# }& K; G
        }( N0 C# m' V6 @
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页% u6 v' O7 V% p
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    $ `. t4 }' W0 v) }; H" w
    9 k' |# M# E4 r# w8 L' D; w9 w6 O/ P3 A: l7 j: N
    ' y( f* Z1 ?, c
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:8 ]  p5 K7 Z, g) a- X: ?) R

    , X  Z$ l- v( a  u9 M9 Z( Q; T1 }: I7 [
    ; }: ~% }3 F' |: D
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    1 z/ u  X8 r1 U$ M( k. S( g& ]& F$ _$ z) r
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    4 \! C1 u5 t2 B 像这样。* P: Z4 t6 J) J# n8 X

    4 E6 B/ X: Z2 T5 A8 k$ q然后就可以调用re库里的findall方法把相关内容爬下来了:9 ^" j  S! F( y$ W

    , h% i) l, r2 {! Dresult = re.findall(t, response.text)) r* C# J9 B! }* P: Y- V! q
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    6 K9 ?7 n/ X* Z
    1 H# H- |* a8 {7 H7 t程序代码
    . Z' k1 Q" R& X' kimport requests
    * e. L7 Y) C& x4 y8 B3 mimport re+ Z9 [5 [# L4 x+ k
    import os
    0 P7 O9 B3 L$ O( ], O- n# [0 K2 O" o' b, L8 m
    image = '表情包'
    ; R. x9 `4 w+ D# Q6 E' Bif not os.path.exists(image):
    ( N& i+ D9 t2 p, Q    os.mkdir(image)
    0 @7 n9 u5 F+ Xheaders = {0 P/ n1 q9 v9 l1 t
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0', c3 g: P$ k, C* H5 U  ~% t
        }; S: n' Y5 P* F# ^5 }9 n7 m4 W* N
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers). X$ |% ^$ w" q+ z- I
    response.encoding = 'GBK'
    1 R7 i5 o& n4 L. d' Zresponse.encoding = 'utf-8'. z# F7 B& z- c( R% f
    print(response.request.headers)8 H4 Z' D& V0 I. n" D' l8 f% W
    print(response.status_code)% ?% _- @4 G7 P2 M9 ?! p! d1 M& c% \
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'/ @7 s9 f$ S6 u0 `: X, r
    result = re.findall(t, response.text)
    4 \+ {# ^! H9 pfor img in result:, g7 d7 k. Q. ?) F
        print(img)% E: l# g7 h+ q
        res = requests.get(img[0])
    8 u1 a. w5 {4 b  K    print(res.status_code)
    3 o' W0 D& M4 Z. F; m: ?) [    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif$ T2 d6 D8 e% N2 Z5 B6 Z
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    " ^/ i1 h7 {8 f5 d' L9 U/ e- h+ m        file.write(res.content)0 ]( n6 U4 X2 S: Z  J; K
    最后结果就是这个样子:
    8 I' N7 n9 r8 Y4 ]" A6 ?7 L
    + B0 d; Y- G/ t: D# X3 @1 I7 T5 a  \) J$ k7 c2 Q
    ————————————————
    . U7 w- O- Q& a0 M4 X* C+ P版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& W# Y, x3 r3 k. J0 q( h: m5 l# ?
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044  V$ a. o& R  |# p

    6 j, M; }1 F' }, I/ b8 z$ p2 B
    5 R8 q5 i/ Z8 Q7 }
    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-7-30 06:22 , Processed in 0.476521 second(s), 52 queries .

    回顶部