zoukankan      html  css  js  c++  java
  • 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)  
     

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

            

  • 相关阅读:
    JVM heap中各generation的大小(Sizing the Generations)
    MySQL中分组取第一条, 以及删除多余的重复记录
    八芯网线水晶头做法(线序)
    Win7命令行下查看无线网络信息
    OpenWrt的开机启动服务(init scripts)
    犀牛书的实例代码:给对象添加freeze, hide, 查询descriptors
    ES6新特性:Javascript中Generator(生成器)
    ES6新特性:Function函数扩展, 扩展到看不懂
    ES6新特性:Javascript中的Map和WeakMap对象
    ES6新特性:Javascript中Set和WeakSet类型的数据结构
  • 原文地址:https://www.cnblogs.com/linshuhe/p/5764187.html
Copyright © 2011-2022 走看看