返回介绍

5.2 多媒体文件抽取

发布于 2024-01-26 22:39:51 字数 1527 浏览 0 评论 0 收藏 0

存储媒体文件主要有两种方式:只获取文件的URL链接,或者直接将媒体文件下载到本地。如果你采取的是第一种方式,只需看5.1节。本节主要讲解第二种方式,即将媒体文件下载下来。

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

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

参数说明:

·参数filename指定了存储的本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)

·参数reporthook是一个回调函数。当连接上服务器以及相应的数据块传输完毕时会触发该回调函数,我们可以利用这个回调函数来显示当前的下载进度。

·参数data指post到服务器的数据,该方法返回一个包含两个元素的(filename,headers)元组,filename表示保存到本地的路径,header表示服务器的响应头。

以天堂图片网为例(http://www.ivsky.com/tupian/ziranfengguang/ ),提取当前网址中的图片链接,并将图片下载到当前目录下。代码如下:

  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

本程序中先从当前网址将img标记中的src属性提取出来,交给urllib.urlretrieve函数去下载,自动回调Schedule函数,显示当前下载的进度。Schedule函数主要包括3个参数:blocknum(已经下载的数据块)、blocksize(数据块的大小)和totalsize(远程文件的大小)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文