QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1996|回复: 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爬虫入门教程:爬取网页图片* O* q/ \0 V. B. S  B
    * i2 M  A3 _8 R
    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:. E0 a$ R9 V- ^' f: \
    0 ]( ]" A2 }0 q) z! U6 Y
    准备工作
    7 T5 I! @& Y0 N5 n- C4 \" X! Y语言:python& F# O. o" E  y7 t; l6 y5 N- _4 @/ p
    ; \# e* s, C! |/ u5 v' r. |0 E6 E
    IDE:pycharm
    : ^6 ?$ L" u; H4 k/ D' n
    ' r8 P) y- n' P# s% a首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:. U( \4 p0 w4 Y1 e7 Z8 I7 |  Q

    $ `  j: @. Z7 |- f% nimport requests //用于请求网页) O1 e3 h6 ]; t" O$ h/ D
    import re  //正则表达式,用于解析筛选网页中的信息8 i, |6 A5 H/ a3 A. x+ ?5 i2 M
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。  k9 e" [: h  o" ~0 s2 T
    : v6 K& @- r# r% T. X6 A0 Q1 ~- i3 s
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:9 O- T; Q+ z6 v5 ?/ s( S3 R' n

    - G2 H0 ~. h1 Y注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    # n9 x' o2 w+ J4 U' {/ f1 z' }- p* _2 Z$ [5 Z9 \! C! B

    - }; Y" Q* D% w2 A' V* [2 e5 Z7 G
    5 B  F: j+ ]- k( Y9 u& P$ x我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    4 }" g1 u2 E' _  D. R# h2 _
    ( M/ k. \* N/ _. Z4 _1 S编写爬虫程序
    2 g# L3 G1 D2 k6 g7 ]首先肯定要通过python访问这个网站,代码如下:. @( k) `/ N- f0 b3 d

    9 x8 |" G# x( k7 E- M! f) Mheaders = {
    4 ?' t" _" A7 t/ s9 }1 z    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    - P& `+ q3 |+ Y) {# d% E, x. b) T" H, X5 g    }
    2 v: @8 q/ Y" r" r' jresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    . ?% ~9 E$ @# ]  s& d/ S* |其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    8 a* Z6 ]( G6 J+ t2 f
    9 q+ |8 w5 {5 v' v% y+ A
    . ^& z' H( K4 L. Y6 C
    0 r8 y* ~, o: q  `" Q* e5 e$ G然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    # o# A7 w9 g# @- C: Y$ o% g
    * p( ]5 ?6 {& w
    9 H) x, y3 q, W8 a* p4 |9 l4 p! q: I/ G  I  l, f3 H/ X9 y
    然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    / t* G) N% ^; U, I; G, |7 \! J# L9 X# K
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'1 N. _% X4 R, o( k8 p2 I
    像这样。
    # N9 `3 K: y2 `, D
    . F- V5 ^$ U  A3 \& h" i2 X  J然后就可以调用re库里的findall方法把相关内容爬下来了:0 O2 \3 o' ^, {! \/ I& i$ w
    2 F0 ~, d0 A8 C- c! n) U
    result = re.findall(t, response.text)2 `/ I2 k/ \2 v6 _7 P7 @4 l( o7 S
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    2 W4 g* L8 N- _; k1 C, n6 {9 n& B! ?; D( \8 g  v# B
    程序代码3 D& \0 y! p" s. ]
    import requests
    $ Z' J3 B) v6 }2 Nimport re; G% a8 g: P- d+ U
    import os
    / h1 }8 r4 ?7 r8 J+ D
      @* J9 H, w. {9 ^3 Uimage = '表情包'
      L( q2 P  I2 ]# r8 dif not os.path.exists(image):
    & ^; U% K+ S( w6 n1 [. B    os.mkdir(image)- ^9 c* M9 @% W6 K3 Y" o
    headers = {
    / ^0 Q5 o7 O( d( @5 F" D    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'' B, B& x) h* P) f  b
        }
    0 Y/ {& o+ }1 z5 _+ m, Aresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)* ^+ g/ O% ?; m
    response.encoding = 'GBK'' c! `8 W$ Z& D$ i
    response.encoding = 'utf-8'- y' E# W) f. N$ I' `: U
    print(response.request.headers)
    ; I! U. J9 o$ X5 K" C- eprint(response.status_code)* f) }- ~2 N# {" N3 R8 ?
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'  K- B; b, w2 Y& \$ r# v! U
    result = re.findall(t, response.text)4 y) x! r7 l% ?  }4 y) x
    for img in result:
    $ P8 N' }% P$ K: r0 L! V: Y3 s    print(img)# N4 I3 {" c) X6 Q" \# i
        res = requests.get(img[0])  O! o( [2 r8 {% U: f2 ~2 f5 ?
        print(res.status_code)  h% r2 j+ ~" |4 r1 D* g' D& R
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif7 J. o( K5 r3 ]- ?
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    # ?# F; R6 m1 x, [: z        file.write(res.content)
    8 P- Z4 |( V0 Q' ?6 X# X& \最后结果就是这个样子:
    / l7 ~1 e. ^% J& D. ]7 E1 B& f' D& p
    6 C) ]4 F) \  B( @* W( k+ A
    3 |  ~- f0 r- V- K. P. S: B9 X! J————————————————1 b( B. t; S" q' v: `9 f
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    . w7 ^- W4 S; q& H原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    6 b) w/ H# i: Z) S2 U( g$ n, j) i# P. S" O

    : N9 x% Z- o6 V
    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 19:02 , Processed in 0.375114 second(s), 51 queries .

    回顶部