数学建模社区-数学中国
标题:
python爬虫入门教程:爬取网页图片
[打印本页]
作者:
杨利霞
时间:
2022-9-7 11:42
标题:
python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片
! D- B6 {5 [. B3 t, E0 Z$ S
& P% w' Y! z. A3 K, t! Q3 M
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
: y: |$ B% l2 e8 `) k% T: W1 G# x
7 R' g4 D" x8 @& W5 F+ y3 q
准备工作
' k+ ]; F8 C- ]. w& ]
语言:python
y3 b% D' q7 Q9 `7 l- M
: O2 W \7 N& s$ i
IDE:pycharm
, W5 k% [% C9 ~/ Y; j3 R
5 a4 D3 t$ u' E
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
0 _ G7 `5 z% j* |4 C
0 B* ?: z1 R5 V" b
import requests //用于请求网页
1 ^" A5 s( K# [4 C
import re //正则表达式,用于解析筛选网页中的信息
) l4 y( e$ A2 ^
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
* {4 ^. g4 E, Q U
0 L- u& P2 E2 K' ?7 H7 Z, V
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
5 I5 h4 g3 l1 |2 c" T4 E
4 R9 Z% ]8 g& o/ Z) n' k% [
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
( X8 C% X0 `6 M* E' Y+ G
3 k1 H! _' l S' H+ B
% g4 H9 j2 e! h( ^, a( n' d
- F$ N4 z/ J, }/ q
我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
7 ~7 Y% c/ M* M2 v, c! S
7 u9 t; o- O* b0 A6 j
编写爬虫程序
2 P7 K. e+ y4 T. L" ?
首先肯定要通过python访问这个网站,代码如下:
, ^) Z1 \/ a& |2 b
; n, p* k/ n0 D! A: Q
headers = {
& _9 @" d+ X2 u; a* N) x- u
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
2 F& G6 F/ k; \4 ~! b8 ^
}
! k8 M& e( G( g9 i4 G& {1 t
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers) //请求网页
! u( k9 {! i! b, l
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
" q4 o: q! H: A# q
2 c2 v3 [* b: T% m4 n
; W: `7 s# t: B1 `
/ [# {8 N5 s; ~0 |, E- e2 j% p
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
' Q9 s2 Q/ Q" C0 x% O* W4 t4 i* x
5 U) O; V2 T* D7 l. H' I
4 m' ~& e$ `/ N; ?
. p I5 S1 A6 T) g5 R
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
- V, k0 Z" y7 Z4 O# o) R
7 E* m# T3 i# n8 \. B
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
1 p, @; |0 M4 T: C! q
像这样。
' I. i! T7 h1 q$ {4 H0 O
' c) C+ A% v2 E# x ]
然后就可以调用re库里的findall方法把相关内容爬下来了:
) G% ~% e% y. J# k+ F
* l) g5 X. J8 ]1 w0 o# |* T- x
result = re.findall(t, response.text)
& j$ W' {2 Q1 l: A0 E4 R
返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
5 o, g6 O0 p( X& @5 s
& Z. s+ x) ], S+ A1 d
程序代码
6 Y4 {' f" P P) d: I4 f u$ g
import requests
$ z) K0 I9 O2 @ z" H
import re
o( M4 w# X# ^9 [) P& k! V
import os
9 K/ R% m, o. j y
) L4 E0 I" [! z' D2 y
image = '表情包'
) e6 w' B7 F4 B
if not os.path.exists(image):
' g8 v5 |; f+ f6 b
os.mkdir(image)
' s! f9 }9 [+ G, Y1 d! `, Y1 A
headers = {
% y/ K5 N: }+ i' d8 G- U5 `% h3 h
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
* ?4 X% A/ q1 R; t& M2 j2 V0 t2 P
}
) k1 ^9 g6 d7 B4 r; t
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
5 g. T" X$ z4 h& a9 f* f& m( q
response.encoding = 'GBK'
7 x' `9 x# n! [- v- O$ j2 l
response.encoding = 'utf-8'
- h: p3 ?* v- S) p& w
print(response.request.headers)
/ G) f! {9 {0 n$ C" _! B& V) b& i
print(response.status_code)
! E( @0 X: s5 b# R: U0 C
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
- I8 Q* r7 }- U/ N! s* x3 X. U, j
result = re.findall(t, response.text)
7 u4 L4 T3 ~0 z1 `, R+ R
for img in result:
: a( Z+ b E4 x+ ]6 {$ K
print(img)
/ @$ S9 m% }; R* ^* T$ w* |
res = requests.get(img[0])
: b8 I0 y# T+ u+ i# O. Z
print(res.status_code)
) Q1 Y4 d. t2 |* m
s = img[0].split('.')[-1] #截取图片后缀,得到表情包格式,如jpg ,gif
' I* a' q1 ^, b3 l) z$ p
with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
! U% ?3 M* ?* H2 L: M( F9 e1 W' C
file.write(res.content)
# i& x# [6 s) n. I) H* r, M1 N
最后结果就是这个样子:
% a) c; \+ n; c" z# d
- f0 _2 ], ~, Y, s' o
9 J4 H9 ?1 O6 M/ Z
————————————————
) i; {+ W0 y/ f- s. L8 n
版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
) y# T' J) S- C t. K: M
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
! v8 C; R- L0 |, z
# F( ]4 o" X/ w
' j+ U8 M& A5 x- i4 k/ X! F
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5