zoukankan      html  css  js  c++  java
  • python多媒体文件抽取

    多文件抽取有:只获取url,或直接下载,下面是怎么将数据下载下来,并显示进度。

    本节主要介绍urllib模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地,函数模型:

    • urlretrieve(url, filename-None, reporthook=None, data=None)
      • 参数filename指定了存储的本地路径
      • 参数reporthook是一个回调函数。当连接上服务器以及相应的数据块传输完毕时会触发该回调函数,我们可以利用这个回调函数来显示当前进度。
      • 参数data指的是post到服务器的数据,该方法返回一个包含两个元素的(filename,headers)元组,filename表示保存本地的路径,header表示服务器响应头

    下面举例代码

    #coding:utf-8
    
    import urllib
    from lxml import etree
    import requests
    def Schedule(blocknum,blocksize,totalsize):
        '''''
        blocknum:已经下载的数据块
        blocksize:数据块的大小
        totalsize:远程文件的大小
        '''
        per = 100.0 * blocknum * blocksize / totalsize
        if per > 100 :
            per = 100
        print '当前下载进度:%d'%per
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    r = requests.get('http://www.ivsky.com/tupian/ziranfengguang/',headers=headers)
    #使用lxml解析网页
    html = etree.HTML(r.text)
    img_urls = html.xpath('.//img/@src')#先找到所有的img
    i=0
    for img_url in img_urls:
        urllib.urlretrieve(img_url,'img'+str(i)+'.jpg',Schedule)
        i+=1
    
    

    Schedule函数包含3个参数: blocknum:已经下载的数据块, blocksize:数据块的大小, totalsize:远程文件的大小

  • 相关阅读:
    牛客网-湘潭大学校赛重现H题 (线段树 染色问题)
    bzoj 2243: [SDOI2011]染色 (树链剖分+线段树 区间合并)
    SPOJ QTREE2 (LCA
    Neo4j-Cypher
    MySQL避免插入重复记录:唯一性约束
    python ftp教程
    Neo4j 导入 CSV 文件
    jupyter notebook 安装 jupyter_contrib_nbextension
    python 性能分析(时间,空间)之 line_profiler 模块 ,memory_profiler的使用
    hive 自定义函数
  • 原文地址:https://www.cnblogs.com/guguobao/p/9521157.html
Copyright © 2011-2022 走看看