数学建模社区-数学中国
标题:
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 g
import requests //用于请求网页
0 T8 ~3 u3 ~6 H5 m; ]9 O, ^; I& _6 d
import re //正则表达式,用于解析筛选网页中的信息
! O' m- \/ Y, x0 e# e1 K
其中re是python自带的,requests库需要我们自己安装,在命令行中输入pip install requests即可。
t! e5 l) [$ A5 y% f. H
6 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# T
headers = {
/ 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" K
t = '<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. d
result = 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& J
import re
4 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# z
if not os.path.exists(image):
/ c/ p0 j4 G2 |) X" z* \
os.mkdir(image)
- X# L5 `+ E+ \8 x2 c' K' d
headers = {
/ 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 V
response = requests.get('https://qq.yh31.com/zjbq/',headers=headers)
! }; p0 z3 D. Y) X
response.encoding = 'GBK'
0 `* F8 u1 o+ N9 [) h: e
response.encoding = 'utf-8'
5 ]0 w8 Z, j3 E3 i
print(response.request.headers)
$ ?" [% d3 F1 t% k. t$ a4 u( X
print(response.status_code)
: C5 W* `5 {3 f2 Z4 W5 v
t = '<img src="(.*?)" alt="(.*?)" width="160" height="120">'
& V5 U: Z% H% {" R' v
result = re.findall(t, response.text)
' }# H! p* X% L6 S$ e
for 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