QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2020|回复: 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爬虫入门教程:爬取网页图片
    - l1 h1 t: ]& H  a5 F3 M# ]
    4 t, `# G* ~9 O$ \6 O% X0 j- Z5 z3 V  q在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:' q8 \2 A$ ^! t9 H. v

    9 Z) [; N+ h8 [6 j9 W5 P准备工作6 @$ d! S5 q  A  N5 v0 b# Z
    语言:python
    & w. x' t* `$ t* i5 ^7 ?. c; x3 r- W. L& o$ b2 A3 `
    IDE:pycharm7 B- ?5 ?$ O* z3 B/ U  l- p
    5 I7 [! Z! V6 j
    首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:* L0 X. c; s  C  r; `- T

    " E7 r: Z( \( o5 f/ H: Oimport requests //用于请求网页
    ( }- Z: Q2 N: R2 Bimport re  //正则表达式,用于解析筛选网页中的信息9 E# Q7 ^+ ~  H  K
    其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。/ y6 g1 f7 H- B/ |) H) J; F5 p& `

    , N$ i5 j. J4 o+ C然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:! |) Q5 X5 i5 v/ U

    0 @0 ^" f! b: s4 Z& v8 z5 x4 ~8 z注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
    # S, b* Y1 W$ j* e  o6 E' y# b& c- a# r, C: z, }" y

    : R" f: ~  ?/ m$ g
    , G/ J2 X1 |3 B5 n8 N我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
    " r# b9 r) s9 q8 C6 x
    . t- W% C( b5 ?* L2 C编写爬虫程序. _( K2 T2 S' m# `2 p
    首先肯定要通过python访问这个网站,代码如下:' [. L. l5 E  [! N. j4 P8 k

    3 m% R% W8 e4 }. S/ L- aheaders = {# i5 e6 @1 `5 w# s. X$ D" X% w7 U8 h
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'5 ]  n; ]& W& ~. e0 U6 B% T/ q
        }
    , f" D  y: ?- oresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页/ f! U( X% `: O
    其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
    3 ^9 @/ u! v* S& w/ p( `0 C1 k: V+ ~1 z% r8 C8 a8 V: u( X* r

    ! \8 [! X% T' r0 p' e- c2 I) j( I% V2 F0 t2 b
    然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:) f6 @# n( b; y& d" `# M  b

    ' N) O2 p5 P* j6 l$ T# Y
    8 n0 Y( h7 b8 R
    " o4 l4 q, Z' t8 n8 Q* P4 g7 ~4 o 然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
    + x1 z) m% C1 T  L+ J7 d0 w& m4 O/ N
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    0 r  A) s2 H( e" l 像这样。
    1 x; ]6 E: H9 ~, p2 |( q# h
    / Y$ L, }8 O3 G8 N然后就可以调用re库里的findall方法把相关内容爬下来了:
    7 G# Z. v8 m. _; g! }3 X& e( j4 x  f8 S+ e
    result = re.findall(t, response.text)/ w$ @6 I& ~5 |9 Z" i9 Q( y- n
    返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。; ^# ], `8 ?) l1 ?& g8 {3 m9 l

    # n/ d7 @) O0 H1 `( u程序代码
    5 ?, H2 N! k& G( ?import requests
    2 v9 Z; g8 l9 rimport re
    . G* q" [6 a  Eimport os  @; V9 Z8 q) ]# W+ E* ]
    & ~$ H& k7 R* [0 K8 Y/ M6 t/ J
    image = '表情包'
    4 x8 j5 a6 D. b$ y7 o  |( L4 rif not os.path.exists(image):
    7 i# S7 ]  g3 y. u% {    os.mkdir(image)/ O; M. n7 j* B* j
    headers = {4 B8 J* m, E/ w2 ?" q9 S
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'& P- m0 S/ H' o) A+ y" M
        }
    ! a: _/ ~6 [, |, k3 L, u+ Bresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)) b; q2 J2 n% I7 q) k- @) s- s
    response.encoding = 'GBK'& Q; n3 {8 P" P3 y) A- P7 @0 n# O( ~
    response.encoding = 'utf-8'
    0 Y0 Q# i  L+ `print(response.request.headers)
      j& Z  b' G. K4 \0 j# p$ Z3 N0 A7 Gprint(response.status_code)6 P0 `5 \# p, j0 L/ L- S
    t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
    9 g# R4 P$ N. G0 S/ ?3 V0 z& uresult = re.findall(t, response.text)* }# a& A( ^3 U& M1 f# [! {& w
    for img in result:
    ! G6 s+ J8 @8 W% Z+ C    print(img)
    5 `( V, }6 z$ q& L. g    res = requests.get(img[0])
    7 f) W* q3 m5 |* J) H' f' Q1 R    print(res.status_code)6 h$ N9 W6 X2 h8 Z" }; S3 S. b
        s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif: a8 c. g6 P% ?
        with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
    7 Q2 I1 p( u3 U: B        file.write(res.content)
    $ R- v  K8 T( u. W2 H# D最后结果就是这个样子:
    , |5 a4 t& P$ @# O* L% U
    ; U* O' f$ y: J% b6 ]
    0 P6 |8 r+ M& {; C/ S/ e————————————————, k! ~4 D2 v* r: W! u
    版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    $ o7 p9 b9 M! E/ s; E4 i* W2 A原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
    8 S  g' U: i6 A4 I7 k
    ) f) J# k# ^+ o
    ' z" }! v" N& [/ M
    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-6-10 17:23 , Processed in 0.427976 second(s), 51 queries .

    回顶部