数学建模社区-数学中国

标题: python爬虫入门教程:爬取网页图片 [打印本页]

作者: 杨利霞    时间: 2022-9-7 11:42
标题: python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片
/ K" U: T/ `/ d8 H3 n! T# Q# C) M% U9 u9 I$ c" b' a
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
/ ]$ E: ^6 R- [: D! F/ ^) j' Y4 R& R' D
准备工作4 t0 X" [1 V+ W$ z
语言:python
6 B# q3 Y3 n, _$ d* J" o+ K' y: g( V3 w4 L: l) A
IDE:pycharm
8 g$ l, k. C# x* i" O* q, e$ }. h9 P: ]% ^' V" O
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
8 d) N  S. X) F. \! E. c
8 N$ ~& B+ u' }$ I2 gimport requests //用于请求网页
0 T8 ~3 u3 ~6 H5 m; ]9 O, ^; I& _6 dimport re  //正则表达式,用于解析筛选网页中的信息! O' m- \/ Y, x0 e# e1 K
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
  t! e5 l) [$ A5 y% f. H6 V: d) i; d8 m3 D; S
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:1 n4 p5 S4 \1 Y  h

1 k) O/ J" i8 v4 R) t注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
/ B, b3 u2 Q8 V' f1 s
/ x( n' e! ~% g8 M% e/ s) x, A
) e! V3 }& y' ?4 C4 I* z7 H( Q. j
4 E+ S! i& L$ X我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
  g, R  ?) ~- ?9 D" E( r% }$ P* s3 K5 D1 R8 R* E# _
编写爬虫程序
# v  x# `1 e: ~8 R& g* J$ P首先肯定要通过python访问这个网站,代码如下:$ o$ N& s+ v( n' }

/ e9 W/ S+ O0 m; q# f# Theaders = {
/ c( I5 S% m; `3 n0 C5 ]- {+ ]! L1 R- l! f    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'2 X5 w' K& }; f2 L# I
    }
2 W: z- N* L$ R$ s5 {- ^response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)  //请求网页
' b0 Z, [4 t0 p5 X# ~* h8 k6 I  w其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。' @9 [# \& w& j* k2 ?/ {$ h: ?0 h5 X
; z3 U/ G0 j6 h" e' Y' x4 f
: h  z+ o5 N; R

8 v, V7 b5 h/ Y+ s+ d然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:8 A/ E" S  {5 y+ S
& c$ G8 {9 q, U# V: h4 q& h9 K- O
: r" |- r' V* W1 E0 s# k
+ C! q% [$ K9 e" v# O
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?3 N3 s) G$ e- L; K3 F9 _$ y2 V

, y% I# H3 S" a# C" Kt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
6 X" O- F9 j: F9 ~) ~ 像这样。
5 r; M: I2 o/ P
' N5 J5 g# R$ W, d! R" q然后就可以调用re库里的findall方法把相关内容爬下来了:
" O# E0 _/ R4 J- u5 ^/ v- Q
; i5 {/ K; L) t& P$ h2 n. dresult = re.findall(t, response.text)
. w1 S( ~1 u1 H' D8 b返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。/ k& r2 n$ x( ^

5 }4 M+ T( j- O1 {5 K程序代码5 B% a* H% w* U, u
import requests
& q) N! N/ x2 W  J' J; s& Jimport re4 A4 h3 ?# E' p! S
import os
/ B0 G: a9 b2 K+ Q8 R4 i5 Y; b& Z) k) i
image = '表情包'
" g. c( I" w3 g/ c0 b* C# zif not os.path.exists(image):/ c/ p0 j4 G2 |) X" z* \
    os.mkdir(image)
- X# L5 `+ E+ \8 x2 c' K' dheaders = {
/ i) H7 w8 S2 T, N% ]    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
7 z6 \/ W4 v% ]# k  ?3 [    }
  _0 X# `2 I# O+ p6 Vresponse = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
! }; p0 z3 D. Y) Xresponse.encoding = 'GBK'
0 `* F8 u1 o+ N9 [) h: eresponse.encoding = 'utf-8'
5 ]0 w8 Z, j3 E3 iprint(response.request.headers)$ ?" [% d3 F1 t% k. t$ a4 u( X
print(response.status_code)
: C5 W* `5 {3 f2 Z4 W5 vt = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
& V5 U: Z% H% {" R' vresult = re.findall(t, response.text)
' }# H! p* X% L6 S$ efor img in result:! \* D1 n- G6 F2 u
    print(img)' `9 P. k3 \  D/ r+ o
    res = requests.get(img[0])% d5 x9 m+ ^( q% J( n" S8 b
    print(res.status_code)/ k2 _  y+ V& S: c& C2 [
    s = img[0].split('.')[-1]  #截取图片后缀,得到表情包格式,如jpg ,gif
1 I& i' N6 T9 s2 {9 s$ q+ F    with open(image + '/' + img[1] + '.' + s, mode='wb') as file:. k, ^( j+ t9 s
        file.write(res.content)
6 r) M+ I6 [0 k2 U最后结果就是这个样子:
/ q& M% Z, S- w
- x6 `2 N/ U# r; f; r/ l& U! w) y0 i9 [7 ~" z
————————————————5 }- v- n3 N1 O+ w, ^9 h* h
版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: i4 G( o1 c# z2 k! U8 W
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
, {5 Y0 M, z0 a/ r
0 `) R3 T( t# T/ _6 |( {( X; |7 A
# H! w& u" y+ u9 ]9 @' g- i' |




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5