看完上篇文档之后,我们对于正则表达式已经有了基本的了解,其实学习最有效的办法就是带着问题和目的,这里我们假设有一个目标:获取某个网页上指定规格的图片的链接地址,并下载到本地。
一、实现步骤:
1.在浏览器中打开某个网页,例如:http://tieba.baidu.com/p/4691693167
2.假设我们要下载该页面中的几张大图,那么我们需要获取图片的url,这其实需要有两步操作来获取,一是先知道该图片的url,二是查看当前网页的html内容找到包含此url地址的格式,这样我们就能通过正则表达式把它筛选出来:
得到图片名称的步骤很简单,直接右键图片选择“属性”即可看到:
复制该地址,关闭属性界面,按键盘F12可查看当前网页的html内容,搜索上面图片的url地址,可以找到:
3.设计正则表达式为:r'src="(.+?.jpg)" width',这里width其实是额外的信息,用来过滤规格之外的其他图片url,相当于附加筛选信息。
二、下载图片保存到本地:
其实在urllib库中已经继承了这样的方法,这个方法就是urllib.urlretrieve(),直接将远程数据加载到本地,例如:
urllib.urlretrieve(imgurl,'%s.jpg' % name)
imgurl是目标图片的url地址,name是图片保存到本地后的名称。
由于获取到的图片url可能是多个,所以使用循环体调用urllib.urlretrieve()方法,将符合规格的图片加载到本地。
三、实现代码:
# encoding: UTF-8 import urllib import re def getHtml(url): response = urllib.urlopen(url) html = response.read() return html #获取目标url的html内容 html = getHtml("http://tieba.baidu.com/p/4691693167") #获取图片的url并下载到本地 def getImg(html): reg = r'src="(.+?.jpg)" width' imgre = re.compile(reg) imglist = re.findall(imgre,html) x=0 #使用循环图加载图片 for imgurl in imglist: urllib.urlretrieve(imgurl,'%s.jpg' % x) x+=1 #开始加载图片 getImg(html)
不难看出,其实关键点还是在于目标信息的筛选正则表达式的设计,上述脚本运行结果为目标图片被保存到本地脚本所在的目录下面: