上一篇:Python 爬虫入门篇-如何获取网页中的图片。我们了解到了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网址。