• 【Python】Python加lxml实现图片解析下载功能


    1、下载网页:OpenHtml.py

    import urllib.request
    from urllib.parse import quote
    
    class HtmlLoader(object):
        def Open(self, chaper_url):
            if chaper_url is None:
                return None
            headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
            req = urllib.request.Request(url=chaper_url, headers=headers)
            response = urllib.request.urlopen(req)
            if response.getcode() != 200:
                return None
            return response.read()

    2、解析图片:ImageAnalysis.py

    import OpenHtml
    from urllib.parse import quote
    import lxml.html
    
    class Imager:
        def Analysis(self,url):
                # 解决中文搜索问题 对于:?=不进行转义
                root_url = quote(url, safe='/:?=')
                openhtml=OpenHtml.HtmlLoader()
                html = openhtml.Open(url)
                # 将HTML解析为统一的格式
                tree = lxml.html.fromstring(html)
                #  通过lxml的xpath获取src属性的值,返回一个列表
                img = tree.xpath('//img[@class="BDE_Image"]/@src')
                return  img

    3、下载图片:LoadFile.py

    import urllib.request as re
    
    class Loader:
        def callback(self,a,b,c):
            '''回调函数可以用来显示进度
            @a:已经下载的数据块个数
            @b:数据块的大小
            @c:远程文件的大小
            '''
            per=100.0*a*b/c
            if per>100:
                per=100
            print('%.2f%%' % per)
    
        def Down(self, url, filename):
            # dir = os.path.abspath('.')
            # work_path = os.path.join(dir, 'baidu.html')
            re.urlretrieve(url, filename, self.callback)

    4、启动文件,即测试文件main.py

    #!/usr/bin/env python
    # coding=utf-8
    
    import ImageAnalysis
    import LoadFile
    
    def downimge():
        # url = "http://www.btany.com/search/桃谷绘里香-first-asc-1"
        url = "https://tieba.baidu.com/p/5475267611"
        imganalysis=ImageAnalysis.Imager()
        img=imganalysis.Analysis(url)
        # 迭代列表img,将图片保存在当前目录下
        x=0
        download=LoadFile.Loader()
        for i in img:
            download.Down(i, 'C:\Users\luffy\Desktop\img\%s.jpg' % x)
            x += 1
    
    if __name__ == '__main__':
        downimge()
        # download = LoadFile.Loader()
        # download.Down('http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2', 'C:\Users\luffy\Desktop\img\Python-2.7.5.tar.bz2')

    urllib模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。

    urlretrieve(url, filename=None, reporthook=None, data=None)

    • 参数filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
    • 参数reporthook是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
    • 参数data指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头
  • 相关阅读:
    模拟两位选手进行n羽毛球比赛(15分赛制)并计算模拟胜率
    Pyton实例
    Python图片处理
    jieba库的使用和好玩的词云
    Python汉诺塔问题
    多线程同时操作一个epoll_fd
    Linux tr命令
    iptables 深入分析
    Linux xtables
    Linux IPC 共享内存
  • 原文地址:https://www.cnblogs.com/mqxs/p/8990413.html
Copyright © 2020-2023  润新知