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)  
     

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

            

  • 相关阅读:
    Oracle第九课课后作业
    面试笔试算法题备考(一)--阿里巴巴--排序
    20 道 Spring Boot 面试题
    个人博客目录(不定期更新)
    程序员笔试面试题总结(不定时更新)
    云计算调研一
    APP开发---Windows查看端口是否被占用
    APP开发---后台设计
    D. Chocolate
    2021天梯赛
  • 原文地址:https://www.cnblogs.com/linshuhe/p/5764187.html
Copyright © 2011-2022 走看看