数学建模社区-数学中国
标题:
python爬虫入门教程:爬取网页图片
[打印本页]
作者:
杨利霞
时间:
2022-9-7 11:42
标题:
python爬虫入门教程:爬取网页图片
python爬虫入门教程:爬取网页图片
; ]. Q I+ {2 x) r5 U
( R& h5 w) B7 @) m0 L
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的。而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程:
+ ] P k& Y" k: i Z5 b
2 G0 D7 g' k2 ?1 m* H1 U
准备工作
% a" U6 L* P# F. `
语言:python
8 u) B* t9 O$ j* c4 D/ j ~
* E# K1 c1 z& Z! b2 X
IDE:pycharm
1 c4 Q" m; G+ c/ [1 T6 g/ K
4 i2 w, Y* L8 w
首先是要用到的库,因为是刚入门最简单的程序,我们主要就用到下面这两:
" O7 l1 |9 L& f$ A2 c) {" h/ Y
3 v- e/ s! Z, F! v& r0 F+ R/ |* V/ B
import requests //用于请求网页
/ L( Y+ d! M1 z) T; [3 ]# T5 b5 z
import re //正则表达式,用于解析筛选网页中的信息
2 B( w- @# o% l$ O9 {
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
2 B& Z; D5 f: f
$ o8 |' A/ j4 q8 c, l" w
然后随便找一个网站,注意不要尝试爬取隐私敏感信息,这里找了个表情包网站:
% Z2 }7 x4 J# J: f) e
' B% C; a9 @3 u+ S) Q/ ~# G
注:此处表情包网站中的内容本来就可以免费下载,所以爬虫只是简化了我们一个个点的流程,注意不能去爬取付费资源。
4 j& N; b: u2 @+ X6 B+ Z& a/ c
2 f# s' l+ ]- k0 X$ t+ v
8 ?# S% s* H2 W. y8 U& E% I
, o5 N0 c; p# J$ W& g
我们要做的就是通过爬虫把这些表情包下载到我们电脑里。
# n% R9 q7 M/ D! n' R. i
1 x5 ]# S' g: z
编写爬虫程序
/ y2 S% v: H! X+ X9 w$ E: C
首先肯定要通过python访问这个网站,代码如下:
4 \( ]) h5 l" w# [ F
6 u' ~ O- u" ]$ M% @
headers = {
) E0 x# o4 ~0 u+ o1 }
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
. ]+ K1 M1 U- ]) Y
}
4 y; |; _- ~, k5 j, E6 o. E
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers) //请求网页
X+ [' o$ J, [, u' z
其中之所以要加headers这一段是因为有些网页会识别到你是通过python请求的然后把你拒绝,所以我们要换个正常的请求头。可以随便找一个或者f12从网络信息里复制一个。
$ Z& |2 I- ]$ C! {( }' L! G
2 L/ D; L& I6 r& I
1 X- p' e" z6 u4 k
* A0 K' W: W8 w
然后我们要找到我们要爬取的图片在网页代码里的位置,f12查看源代码,找到表情包如下:
, Y/ j( q% u* v8 C0 H) z$ I5 y
9 ?4 i+ g. @& L4 O. I- S0 Q
" L" z& Z& B ~1 A- ?. R
* g' n( k( u: a3 \' ], q7 l9 o
然后建立匹配规则,用正则表达式把中间那串替换掉,最简单的就是.*?
2 k& {. B/ P& a
3 _" a: }5 W+ Z) m
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
8 _! d) t. G- u' m& m( |% d+ j7 P
像这样。
0 Q2 }1 C* H* G( P, M
# A5 c0 x. a% N/ }6 }
然后就可以调用re库里的findall方法把相关内容爬下来了:
, e, Q) Z6 K( s0 S# h; x c
2 Z; j2 k! k; i8 k
result = re.findall(t, response.text)
6 X4 J3 _7 N6 X" ^8 F! w
返回的内容是由字符串组成的列表,最后我们经由爬到的地址通过python语句把图片下下来保存到文件夹里就行了。
; R$ i' ^9 s6 Q- V
9 R3 G9 F! q8 w3 W9 U, l6 t
程序代码
" P+ q8 I# r) }/ C" S! ]
import requests
) e2 N* \( s9 V$ z. ~
import re
+ d, Z' g( I- f: ?7 I
import os
) ?5 o6 j: B2 l1 g; {5 q
. A% Q! ~! d( F9 H1 ^7 B7 k. ^
image = '表情包'
/ ]. N6 P) p$ a4 J0 ], j4 \
if not os.path.exists(image):
# i. z) f0 w; P: `% |% `
os.mkdir(image)
' E0 J# `8 G8 ?! M, W
headers = {
5 ?+ }0 s. Z( O$ x5 _3 o
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'
9 L+ h' T7 x3 d8 k4 y) s/ h1 @
}
. \& Q, }% k; s; L) h2 u
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
% R n' [, ?2 R# k( X
response.encoding = 'GBK'
+ j/ ]' M; U5 H
response.encoding = 'utf-8'
8 H$ l8 m7 h+ e& }1 q' x
print(response.request.headers)
& d( \. p4 v& a0 d9 {! d$ P5 v8 Z; w5 b$ H
print(response.status_code)
1 j ]8 K, }- \2 @2 I
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
' c, R9 \7 v+ M# |# p" P
result = re.findall(t, response.text)
$ A- a+ ?3 n/ l' P1 F- G: S! b: t
for img in result:
/ l5 m2 d. f3 T; V; \
print(img)
, o1 z" z; j1 V$ x' i2 V
res = requests.get(img[0])
1 `" z% ~8 Y* d/ {7 \% l; s
print(res.status_code)
4 N7 l I' ]9 y* F4 E& H1 W
s = img[0].split('.')[-1] #截取图片后缀,得到表情包格式,如jpg ,gif
o0 M8 c/ d- I/ w1 x4 O5 E4 a: R3 \
with open(image + '/' + img[1] + '.' + s, mode='wb') as file:
; n! u" S. J7 ]0 K+ N W, _
file.write(res.content)
3 j4 j) t) |+ v" \
最后结果就是这个样子:
) S/ J& c4 `( i
# E! q0 y7 u5 U2 l
! T% G: a0 H2 g- n9 q" p% m8 t$ T& S
————————————————
! U% c2 y& t$ @* ^( k
版权声明:本文为CSDN博主「plexming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
+ C$ a0 [9 H9 c
原文链接:https://blog.csdn.net/qq_46145027/article/details/123969044
% g6 ]3 z% V% R0 P) t0 R2 B
3 q* ~# I0 g& D2 X6 f
1 ~$ j H. Q6 q' ~0 k$ q
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5