QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2017|回复: 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爬虫入门教程:爬取网页图片$ j- E5 M9 S: ~5 V/ ^0 R

    3 Z! K$ j; X7 t  q在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:5 T' y3 C" o, ~  Q; R* ^! A, @+ @

    0 }2 W+ [7 n4 u! M3 Z5 L准备工作* b: R) `* h- Y2 Z
    语言:python5 V; ~% f, L+ `9 s1 j" j
    ' I" q; u2 w( G, @. e5 y* `
    IDE:pycharm
    8 b% m  D: U/ g4 r7 j! r! [) l' ]& w& W
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:1 e  ]( S- t/ {% A0 B, M
    2 [, Q( A& S# j- b5 o
    import requests //用于请求网页' k* q  Z! i) c0 ?4 r( X( [
    import re  //正则表达式,用于解析筛选网页中的信息
    , v, `8 ?, j! ]) S* t2 }  e6 V其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    / c/ v! n# _) U! l6 z. C4 z, j4 q2 e$ B0 g4 s' B
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:8 U) ]7 t: q/ t$ x

    2 d/ p+ t) Z) E" w2 R, R% V注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    & ^% U( s+ U) L
    $ }- s! ^( l: X& c( D+ i- v3 n; X6 S' ?6 S5 U

    3 C# c6 _4 F! D. m我们要做的就是通过爬虫把这些表情包下载到我们电脑里。5 B" X; g3 E: n" T; D' t. L' N( C

    6 {5 q8 @( W9 J  V+ {& }9 W6 V2 p编写爬虫程序
    " t) \- V: A! _首先肯定要通过python访问这个网站,代码如下:( Q! l+ o% {$ k0 p

    " w4 d( Q* y" v/ u( m# yheaders = {
    9 @& U1 ]7 @9 E/ U# ^" [. o    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    ; _- o, z' }/ {    }
    * S3 q$ ^: ]3 P0 fresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    9 d: z" W3 U, \其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    . u: R& K% [& a9 q2 h3 h4 d+ X1 M, S8 I; Q

    / D8 y  a6 u: M9 I/ ^
    * d3 D2 D; S# S! K1 q2 o$ i- b然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
    ( g+ n: O1 R& {4 F3 j- l$ _; Z+ K% e$ f" a0 G
    5 G3 P) Z) D2 B: W: o

    ! B* n! n9 D! X6 d2 c' l; P5 H 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?* t' D) {$ P$ w
    * y! D, m3 h( J
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'$ {( i0 t$ x4 c0 U
    像这样。, p% D9 A& K; L/ ~
    ; ?5 u: G- j& {2 S  P
    然后就可以调用re库里的findall方法把相关内容爬下来了:6 }) L3 ]4 _6 z5 {

    9 l7 U9 X- t! p$ p2 mresult = re.findall(t, response.text)1 ?) x# Z8 L, E# ?2 J
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。4 r! |* P! t$ M$ r; E* D

    1 M2 C  g( z% t3 x% s& S# C程序代码
    7 [; i2 x& L9 J; \7 ]8 P/ aimport requests% m, n* V/ T6 A% G$ o$ X. @
    import re5 S* u% R6 b6 D7 Y
    import os9 z) L* ^" ]' N. n

    , T$ B, `" n6 K; I' Uimage = '表情包'
    0 K# F6 k2 Z. R- W3 J2 sif not os.path.exists(image):* u& ^7 v$ k! n. {5 i  w4 G
        os.mkdir(image)1 t  T: `# X+ _. t# v* y6 [( m5 p
    headers = {- j! w+ ?2 C# J4 J6 m
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    ! y2 b4 U: L6 N    }8 v9 [/ t+ C  v6 B7 k
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers); ~% e# y+ E( ~* ]. m0 T9 N1 b
    response.encoding = 'GBK'4 ]: S5 a; h7 ?$ ~  F& \
    response.encoding = 'utf-8'
    ' o6 M1 v7 y& b) }. sprint(response.request.headers)
    ! h. S2 d& U' j/ `, \2 L' tprint(response.status_code)
    7 O/ J) I. `) {7 Z2 I' kt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    " v1 q/ ]1 F3 `+ Oresult = re.findall(t, response.text)
    ; @5 R* Z. B) V* E# E+ @8 Ofor img in result:+ p2 n, l4 I  i2 b2 e
        print(img)
    ( k. b$ d# S, ~$ s& t2 k; Z    res = requests.get(img[0]); k& I# X/ I; w! v+ h% B( s
        print(res.status_code)  O: _0 P. p8 p& P6 Y+ j
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    5 a7 o; @5 c% }, b  O    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    . ^$ z" j( O+ i5 t( w' }        file.write(res.content)( z1 x( C6 I% P6 V+ @- E0 w$ B
    最后结果就是这个样子:
    8 ?" F8 u: {, a& T0 v
    4 @3 q- ^3 m3 t) N
    1 Z! @0 z9 ^4 H9 A6 h————————————————
    ( U+ W* _. Q# v' i版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。. R' s' Y" s+ C2 _+ c6 x' j
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    * C4 f& }0 a% V8 Y. v  F) f- c1 j6 Q- ?" J- _# q6 a2 r8 n2 n8 u
    : h# j! A: r2 Q% C+ V1 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-5-30 20:06 , Processed in 0.405768 second(s), 51 queries .

    回顶部