QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2035|回复: 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爬虫入门教程:爬取网页图片) R  A, r: l& f  ]" F( c

    " a/ w( W1 s' I/ T3 q, u在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:+ R2 V# [) G9 ^( Z8 b. j0 Q* t4 D8 Y

    4 m9 E$ q6 ]9 `3 i" P% h准备工作' h0 r+ O5 H; S8 P3 t2 ^
    语言:python
    8 ~; [- u. N" {# d. P
    . ~) F2 Q4 s9 h) z9 H0 ?$ `! ]IDE:pycharm7 H$ K* O  k: r0 i- R1 e. z
    . Y9 ~* t  f' k' e' [' U9 [
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:$ O, w7 i/ {( e  ?! @- e2 b0 A" B
    1 q2 }5 T0 ~6 H  o7 p- G* d" I! F- M
    import requests //用于请求网页
      ?2 @$ B$ d! Y  Gimport re  //正则表达式,用于解析筛选网页中的信息6 k9 U& }! [( v4 X
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
    3 e( e3 G/ `' s0 @: n# ~9 r0 I8 D9 v$ E+ M) w& ]
    然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
    7 R3 p( |& G4 N% e: d8 S/ Z# O/ B) J0 P: j  q; N0 b
    注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    # u4 t. X. C4 W: ?) ?/ n0 w) C2 B: L: W( T7 S$ [8 ~( B9 s

    ' p% _: c/ C* h
    % W# o9 T; |; S) K0 ?我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    3 u, H3 N3 e  C/ C, b
    ( m9 G; P8 ]2 B3 M编写爬虫程序
    4 Z2 O$ v# A4 i5 G" S首先肯定要通过python访问这个网站,代码如下:( U: a/ f% g" s0 m

    1 Z" t8 U. U7 l" Vheaders = {
    5 R8 D2 }" m" Q. p# U    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
    6 C* a1 k, ^% i9 o! A. P3 j    }: J# F$ U9 p( Z; x* ^/ q+ N
    response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
    ; k  W: H9 U! h; G  w其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    6 v. L6 y1 T' K3 J! x8 C5 E8 U$ ?! ^) a* o- |! P6 ?  b

    : w/ r! R2 T# h% N/ K% D
    , E7 O7 B3 b# J+ q8 r+ M. h然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:" E& f- x+ T- N% N! Y$ @

    ( Z! W+ Q0 U$ f% v) _/ D$ o& a9 L& ^8 [

    8 }3 l/ z2 x7 y- _0 m 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?/ v8 j" n- K/ d: V& ~. q1 _5 g$ A

    8 U) a& L( x1 [t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    ) Q! I; T* @  c 像这样。; {4 T! h! f' x
    4 J8 ]% z8 D9 a. s. [
    然后就可以调用re库里的findall方法把相关内容爬下来了:
    ) R  T4 Q4 l* S3 P* J" T5 T0 s7 R# `- d
    result = re.findall(t, response.text)
    : Q3 o6 O* D/ Q; v返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
    3 O5 x2 o3 ?9 k( y& h8 d. C5 ]3 x% O
    程序代码  `$ X& P: C' f! V* s% ?8 @; T' S
    import requests
    + D; \7 `  c$ B- |9 \  Eimport re+ e* u% I+ z- d' C. n
    import os
    / I4 l% b  l: u6 Q, g
    : ^2 |9 K# ]& _) y2 u2 Uimage = '表情包'
    / L& H) @" L* T- P+ _7 e7 Zif not os.path.exists(image):0 K  {# A$ ]+ \( i$ ?. ~5 T6 m$ V
        os.mkdir(image): V8 J  f- X- M, V. K# z
    headers = {0 ~6 i4 h+ m4 V& N. Q
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'4 D+ [2 x4 H' I! A4 A
        }
    # {( R) S; Q) R; o- cresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)' G7 o& }8 g, d& M4 h) g0 l( R
    response.encoding = 'GBK'3 I' w& q0 G( U$ G. c" Q7 d
    response.encoding = 'utf-8'( _# R$ t1 Z4 k  Q, t" l
    print(response.request.headers)
    " Q' Y8 ]# E9 Q! I  y$ m$ mprint(response.status_code)9 ~% `' d1 {6 d* J
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'' e) n1 w- D" W$ o: a; Z; s! d
    result = re.findall(t, response.text)9 W9 o, v4 ^9 U4 L; D
    for img in result:) Z2 u& ]. C  ^. S
        print(img)" E# m5 L6 i1 s5 E2 {
        res = requests.get(img[0])
    ( n4 @( {5 F3 ^9 G% b& G# s' ]) ]; I    print(res.status_code)
    , h  H( s6 @+ f5 q8 _$ B2 E    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
    : N  a" k7 W2 X; y& h    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    . V; C( Q/ B0 y9 v7 S        file.write(res.content)
    5 e$ z' |: U  H; K0 S最后结果就是这个样子:# N# X- ]* A" }6 L$ T, q

    6 i1 s4 N) Y% D' H8 O9 d8 Q. U. q/ F
    ————————————————: b, N3 M( l2 b) y# c5 r
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( Q" }3 Y- c- [7 a$ Z
    原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044' Z; n- \, Q& R0 @
    : c: z' F7 E+ [: z; R: h
    6 K/ t# A* W1 p: C& Z! w: \$ g6 s
    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-29 13:20 , Processed in 0.444449 second(s), 51 queries .

    回顶部