首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道urllib.urlretrieve是否成功?

如何知道urllib.urlretrieve是否成功?
EN

Stack Overflow用户
提问于 2009-06-12 17:15:34
回答 8查看 70.4K关注 0票数 55

即使远程http服务器上不存在该文件,urllib.urlretrieve也会静默返回,它只是将一个html页面保存到指定的文件中。例如:

代码语言:javascript
复制
urllib.urlretrieve('http://google.com/abc.jpg', 'abc.jpg')

只是静默地返回,即使google.com服务器上不存在abc.jpg,生成的abc.jpg也不是一个有效的jpg文件,它实际上是一个html页面。我猜返回的headers (一个httplib.HTTPMessage实例)可以用来实际判断检索是否成功,但是我找不到httplib.HTTPMessage的任何文档。

有人能提供一些关于这个问题的信息吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-06-12 18:46:05

在您的情况下,如果可能,请考虑使用urllib2。它比urllib更高级,更易于使用。

您可以轻松检测到任何HTTP错误:

代码语言:javascript
复制
>>> import urllib2
>>> resp = urllib2.urlopen("http://google.com/abc.jpg")
Traceback (most recent call last):
<<MANY LINES SKIPPED>>
urllib2.HTTPError: HTTP Error 404: Not Found

resp实际上是一个HTTPResponse对象,您可以使用它做很多有用的事情:

代码语言:javascript
复制
>>> resp = urllib2.urlopen("http://google.com/")
>>> resp.code
200
>>> resp.headers["content-type"]
'text/html; charset=windows-1251'
>>> resp.read()
"<<ACTUAL HTML>>"
票数 27
EN

Stack Overflow用户

发布于 2012-03-17 00:02:07

我让它保持简单:

代码语言:javascript
复制
# Simple downloading with progress indicator, by Cees Timmerman, 16mar12.

import urllib2

remote = r"http://some.big.file"
local = r"c:\downloads\bigfile.dat"

u = urllib2.urlopen(remote)
h = u.info()
totalSize = int(h["Content-Length"])

print "Downloading %s bytes..." % totalSize,
fp = open(local, 'wb')

blockSize = 8192 #100000 # urllib.urlretrieve uses 8192
count = 0
while True:
    chunk = u.read(blockSize)
    if not chunk: break
    fp.write(chunk)
    count += 1
    if totalSize > 0:
        percent = int(count * blockSize * 100 / totalSize)
        if percent > 100: percent = 100
        print "%2d%%" % percent,
        if percent < 100:
            print "\b\b\b\b\b",  # Erase "NN% "
        else:
            print "Done."

fp.flush()
fp.close()
if not totalSize:
    print
票数 7
EN

Stack Overflow用户

发布于 2009-06-12 17:21:43

根据文档,is是undocumented

要访问该消息,看起来您需要执行以下操作:

代码语言:javascript
复制
a, b=urllib.urlretrieve('http://google.com/abc.jpg', r'c:\abc.jpg')

B是消息实例

因为我已经了解到Python,所以在我输入时使用Python的内省功能总是很有用的

代码语言:javascript
复制
dir(b) 

我看到有很多方法或函数可供使用

然后我开始用b做一些事情

例如

代码语言:javascript
复制
b.items()

列出了许多有趣的东西,我怀疑尝试这些东西会让你得到你想要操作的属性。

很抱歉,这是一个初学者的答案,但我正在尝试掌握如何使用内省能力来提高我的学习,而你的问题刚刚弹出。

我尝试了一些与此相关的有趣的东西-我想知道我是否可以自动从目录中显示的每个不需要参数的东西中获得输出,所以我写道:

代码语言:javascript
复制
needparam=[]
for each in dir(b):
    x='b.'+each+'()'
    try:
        eval(x)
        print x
    except:
        needparam.append(x)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/987876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档