如何在python 2.7中使用urllib.request.urlretrieve

时间:2016-08-19 00:18:36

标签: python python-2.7 urllib2 urllib

我正在尝试从image-net.org下载图像,这样我就可以创建一个haar级联分类器。我正在学习本教程https://www.youtube.com/watch?v=z_6fPS5tDNU&list=PLQVvvaa0QuDdttJXlLtAJxJetJcqmqlQq&index=18,但我使用的是python 2.7而不是python 3.所以在教程中他有一行:

urllib.request.urlretrieve(img, pathToImage)

而不是import urllib.request我这样做了import urllib2所以我尝试了这个,但它并没有发生

urllib2.urlretrieve(i, "Negatives/"+str(num)+".jpg")

提前谢谢你!

3 个答案:

答案 0 :(得分:13)

您只需要在没有' 2'

的情况下导入urllib
import urllib
urllib.urlretrieve(i, "Negatives/"+str(num)+".jpg")

答案 1 :(得分:1)

我发现在不同的构建系统上,我将拥有不同版本的Python,这完全不受我的控制。

所以我调整了脚本,以这种方式获得urlretrieve

import sys
print("Python: " + sys.version)
sys.stdout.flush()

import os, re, difflib

# because somewhere along the line they  may have deprecated `urlretrieve`
#   mentioned in docs for python [3.5.5, 3.6.6, 3.7.0, 3.8.0a0] that:
#       `[urlretrieve] might become deprecated at some point in the future.`
def UrlRetrieve(url, fname=None):
  if sys.version_info[0] <= 2:
    import urllib
    return urllib.urlretrieve(url, fname)
  elif sys.version_info[0] <= 3:
    import urllib.request
    return urllib.request.urlretrieve(url, fname)
  else:
    import shutil
    import tempfile
    import urllib.request
    with urllib.request.urlopen(url) as response:
      if fname is None:
        with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
          shutil.copyfileobj(response, tmp_file)
          return (tmp_file.name, response.info())
      else:
        with io.open(fname) as the_file:
          shutil.copyfileobj(response, the_file)
          return (fname, response.info())

然后,以这种方式使用它:

url = "http://...whatever.../bootstrap.zip"
pair = UrlRetrieve(url)

然后,因为我要导入的绝对是python 2,所以我需要在3世界中这样做:

if sys.version_info[0] >= 3:
  import zipfile
  zip_ref = zipfile.ZipFile(pair[0], 'r')
  zip_ref.extractall(pair[0] + ".d")
  zip_ref.close()
  import os
  os.system("2to3 -w " + pair[0] + ".d")
  sys.path.append(pair[0] + ".d")
else:
  sys.path.append(pair[0])
from bootstrap_common import *

现在,我保留了这些代码片段句柄,以供将来需要在Python 2和3上同时使用urlretrieve的脚本使用。

答案 2 :(得分:0)

就此Python urllib urlretrieve behind proxy

$sql = "SELECT * FROM post_info WHERE poster = 'login_user' UNION SELECT * FROM post_info WHERE replier = 'login_user'";

代码可以转换为

import urllib2

download = opener.urlretrieve(URL, "Negatives/"+str(num)+".jpg")