数学建模社区-数学中国
标题:
python爬虫入门教程:爬取网页图片
[打印本页]
作者:
杨利霞
时间:
2022-9-7 11:42
标题:
python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片
1 J- ~8 I( R7 y4 w' L" w) B# S6 m
; s" I2 ?9 n2 E- H# W
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
9 V# T) ?- ~2 W2 e% A9 ?
5 h- [1 o7 y& Z% z2 t: ^; S
准备工作
7 Q% C5 _0 _ w, s3 |
语言:python
6 X' c3 f( u, Q* D
8 Q7 r% |+ b& s+ Y% }
IDE:pycharm
' u# @7 y% L- g) ?: k3 O+ N
' i5 u, H9 o7 J. j6 r# @
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
T5 B3 T0 w* A( Q) [$ r- V5 P
* m$ Y2 C8 q7 `: [5 C
import requests //用于请求网页
$ d# N. z v1 a9 }. l( |% d
import re //正则表达式,用于解析筛选网页中的信息
2 v* j/ r- H( f2 x2 d/ ^$ z! b
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
- g5 S- Z5 H0 I6 n @
) s: q4 Q" E' Q
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
+ O& [5 x$ v* }7 J9 }
2 c& }# f6 j+ I& Z- ~/ Y% H
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
5 A* y4 L, r2 }0 C+ I# I9 q3 d
% S; p: d; s+ G% k- N5 ?. b
! h* `+ U( V9 Q. t& B
* f5 }) E4 A# U" z( H
我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
) P: j G6 l! T7 ]5 n
/ o3 I' {; H/ w/ o6 S
编写爬虫程序
" a/ i& M; ^3 D* q8 [
首先肯定要通过python访问这个网站,代码如下:
0 \8 t! ^# X- v+ Y5 f
# R: E( _0 Q8 K; a" `
headers = {
) f8 a1 m! R! k5 g7 V; S4 C j+ ?
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
( h3 [/ E( k, h7 E( f" p
}
; ?$ u! B/ ]) @# L! {. m
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers) //请求网页
- x# g1 q2 V0 j, O1 b/ j) ~' [! B" Z
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
: B% b- v. M* A* }, z
( i7 C4 K4 g! d! I; |
5 E' A2 V" b: y- Y P
% D, _3 ?$ g( W- a6 x0 B% O6 ^
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
& W" O# P' ?3 G4 `# m
: p" m: b) J9 b
) t% \! ]* w0 W3 x7 O
8 o4 ?. x3 f6 E0 z: @0 D
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
8 p& A& p; g, ^6 U
2 x5 @) A5 ~8 O7 z6 e
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
% s& r! K$ m7 p# O4 G& I8 ~( k
像这样。
& ^- V# Y- E& d3 p; Q
) B7 b4 A9 t% t5 P
然后就可以调用re库里的findall方法把相关内容爬下来了:
e' Y8 J- ^ F/ U V6 F
( [' |1 h) D9 o
result = re.findall(t, response.text)
! f' f# _) G. ^+ e/ s1 P
返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
/ r3 v( K* ~8 P/ L0 w
9 w) I, ^, g4 k
程序代码
" x! V8 P6 z% W( e. s" a+ Y. O
import requests
. U3 n% k& f8 U
import re
- J5 h1 K6 b8 B9 T! J" V7 \, J
import os
) E8 C- Y) V) }) b" [ E+ C
0 J0 h5 J7 L- C. x) Y$ }
image = '表情包'
/ t6 h( z; T5 z- ^! Z! {
if not os.path.exists(image):
& S7 L$ h$ _! P& m: ?( N2 i
os.mkdir(image)
* @9 i. ^% g* k
headers = {
0 M! z: Q4 L4 o0 H) A
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
. t1 y+ ?' X" H+ R
}
! I4 U, D3 m; u4 E1 D* d
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
) N1 a! k' Y5 Y# W, R" _
response.encoding = 'GBK'
# y0 w; J! w! }# ], T8 J
response.encoding = 'utf-8'
; c1 L2 y# _( J8 g7 P5 i8 U
print(response.request.headers)
. h3 O# j% Z2 q* r, f4 O
print(response.status_code)
1 C$ w. V2 j/ w' R( W
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
: Y* ~* ^) F ]
result = re.findall(t, response.text)
5 Y" X& K: D8 b) s4 e! k8 @
for img in result:
- I p2 @$ O2 J0 G
print(img)
3 Y; L/ a" C& h
res = requests.get(img[0])
* e' o' y1 y! @. i G" h
print(res.status_code)
- G4 t* S/ B% P$ z& |
s = img[0].split('.')[-1] #截取图片后缀,得到表情包格式,如jpg ,gif
1 q# u- L# p# I5 d% v5 T
with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
, u/ d6 \% [1 [' Y
file.write(res.content)
* D7 f& y# b" M2 c: \9 u7 p
最后结果就是这个样子:
V( \2 ]: V8 w) v8 \! v% a
& d# H5 t: x5 X& j4 r
( @% H3 [, j* ^/ y
————————————————
) l* G, A. i! o @3 ^* v9 S7 k
版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
d! F3 S. `6 ]- p
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
& |0 f. Q( p+ S4 S' h) Y5 \0 w
2 F* X. }4 ?% U
1 u( D1 D3 U; A' Y: Y" f
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5