Python 爬虫5——爬取并下载网页指定规格的图片

        看完上篇文档之后,我们对于正则表达式已经有了基本的了解,其实学习最有效的办法就是带着问题和目的,这里我们假设有一个目标:获取某个网页上指定规格的图片的链接地址,并下载到本地。

        

一、实现步骤:

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)  
 

        不难看出,其实关键点还是在于目标信息的筛选正则表达式的设计,上述脚本运行结果为目标图片被保存到本地脚本所在的目录下面:

 

        

posted @ 2016-08-12 11:08  何乐不为~  阅读(1986)  评论(0编辑  收藏  举报