我们了解到了 urllib 获取图片的原理,urllib.request.urlretrieve()
就是用来获取图片的。
这一篇,我们用正则表达式匹配出指定网站的所有图片,然后都下载下来。
re 库就是我们用来做正则表达式的库,re.findall(a, html)
可以把 html 中所有符合 a 正则表达式的链接全都匹配出来。
我们来看看 a:'img src="(http.*?)"'
,一般 html 中的图片就是 img 标签,加上 src 网址,光匹配 img 标签的话,可能是空的哦。
http.*
就是匹配所有网址了,"." 代表任意字符,"*" 代表前一个字符可以是任意数量了,.*
就表示 http 开头的所有网址了,.*?
加个 ? 就限制满足条件的只匹配一次,没有 ? 就是匹配任意次,.*
习惯性称之为贪婪匹配!
import urllib.request
import re
url="http://ohhappyday.com/" # 我们要爬取图片的地址
page = urllib.request.urlopen(url) # 第一行 打开网址
html = page.read().decode("utf-8") # 第二行 获取html源码
imglist = re.findall('img src="(http.*?)"',html) # 第三行 在html中匹配出符合条件的字符串
x=0
for imgurl in imglist: # 遍历图片地址列表
urllib.request.urlretrieve(imgurl,'pic%s.jpg' %x) # 第四行 获取图片并保存
x=x+1
注:可以分别用 print 打印出 page、html、imglist、imgurl,这样可以让你更清楚每一步在做什么,产生了什么。
注:如果网站地址中包含中文会报错,这个会在后期讲解中做处理。
注:如果某些网站没有效果可能是做了反爬虫处理,或者它展示图片的原理不是常规的 img 加 src 网址。
如下是我们要实战的网站:
运行后的效果图如下:
喜欢的点个赞❤吧!