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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://linsh-tech.blog.csdn.net/article/details/52122213

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

        

一、实现步骤:

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

        

展开阅读全文

没有更多推荐了,返回首页