【问题标题】:Python ValueError: unknown url type: space (?)Python ValueError:未知的 url 类型:空格(?)
【发布时间】:2017-02-17 19:12:55
【问题描述】:

我在 Python 2.7 中使用 urllib2 模块,使用 Spyder 3.0 通过读取包含文本文件列表的文本文件来批量下载文本文件:

    reload(sys)
    sys.setdefaultencoding('utf-8')
    with open('ocean_not_templated_url.txt', 'r') as text:
        lines = text.readlines()
        for line in lines:
            url = urllib2.urlopen(line.strip('ï \xa0\t\n\r\v'))
            with open(line.strip('\n\r\t ').replace('/', '!').replace(':', '~'), 'wb') as out:
                for d in url:
                    out.write(d)

我已经在我已经剥离的 url 中发现了一堆奇怪的字符,但是,脚本在完成近 90% 时失败,并出现以下错误:

我认为它是一个不间断的空格(在代码中用 \xa0 表示),但它仍然失败。有什么想法吗?

【问题讨论】:

    标签: python urllib2 download


    【解决方案1】:

    这是一个奇怪的网址!

    指定网络上的通信协议。如果文件存在于 WWW 上,请尝试在 URL 前加上 http:// 和域名。

    文件总是驻留在某处、某个服务器的目录中或本地系统上。所以此类文件必须有网络路径,例如:

    http://127.0.0.1/folder1/samuel/file1.txt

    同样的例子,localhost127.0.0.1 的别名(通常)

    http://localhost/folder1/samuel/file1.txt

    这可能会解决问题。想想你的文件存在的位置以及应该如何处理它......


    更新:

    我对此进行了很多实验。我想我知道为什么会出现这个错误! :D

    我推测您存储 URL 的文件实际上在末尾附近有一个 sneaky 空行。我可以说它已接近尾声,正如您所说的那样,它执行了大约 90%,然后失败了。因此,python urllib2 函数 get_type 无法处理该空 url 并抛出 unknown url type:

    我认为这就是问题所在!删除文件 ocean_not_templated_url.txt 中的空行并尝试一下!

    请检查并告诉我! :P

    【讨论】:

    • 嗯.. 我应该在哪里指定协议?顺便说一句,谢谢你的建议。
    • 我明白了。谢谢你的详细解答!!前缀http:// 已存在于文本文件中的 URL 列表中,例如,http://www1.ncdc.noaa.gov/pub/data/paleo/paleocean/sediment_files/complete/e49-23-tab.txt。 (它们在 ftp 服务器上。)是否有可能 if 其中一些 URL 不再使用,这会导致问题?我知道他们已经被我们的数据经理转移了,有些已经很老了。再次感谢。
    • @SamuelLockshin-NOAAAffilia 再次更新!希望我做对了!
    • 是的,有一些空行,另一个问题是一行中有两个 url,因此它们之间的空间使 python 绊倒了(尽管尝试将两者作为一个 url 读取会成功也失败了)。无论如何,我将答案和更新标记为正确。再次感谢! -山姆
    • @Samuel 耶!乐意效劳! :)
    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2018-01-02
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多