【问题标题】:ValueError: unknown url type in urllib2, though the url is fine if opened in a browserValueError:urllib2 中的未知 url 类型,但如果在浏览器中打开该 url 就可以了
【发布时间】:2011-04-28 18:54:40
【问题描述】:

基本上,我正在尝试在 python 中使用 urllib2 下载 URL。

代码如下:

import urllib2
req = urllib2.Request('www.tattoo-cover.co.uk')
req.add_header('User-agent','Mozilla/5.0')
result = urllib2.urlopen(req)

它输出 ValueError 并且程序会为示例中的 URL 崩溃。 当我在浏览器中访问 url 时,它工作正常。

任何想法如何处理这个问题?

更新:

感谢 Ben James 等发现问题 => 添加 'http://'

现在问题被细化了: 是否可以使用某些内置函数自动处理此类情况,或者我必须对后续字符串连接进行错误处理?

【问题讨论】:

    标签: python urllib2 httprequest


    【解决方案1】:

    当您在没有协议的浏览器中输入 URL 时,它默认为 HTTP。 urllib2 不会为您做出这样的假设;你需要在它前面加上http://

    【讨论】:

      【解决方案2】:

      您必须使用包含协议在内的完整 URL,而不仅仅是指定主机名。

      正确的 URL 是 http://www.tattoo-cover.co.uk/

      【讨论】:

      • 是的,……好观察!所以后续问题:是否可以使用一些内置函数将错误的 url 转换为 urllib2 可接受的,或者我必须自己使用字符串操作(通过连接 'http://' + string + '/')进行错误处理跨度>
      【解决方案3】:

      您可以使用 urllib (Python 3) 中的方法 urlparse 来检查寻址方案(http、https、ftp)是否存在,并在不存在的情况下连接该方案:

      In [1]: from urllib.parse import urlparse
          ..: 
          ..: url = 'www.myurl.com'
          ..: if not urlparse(url).scheme:
          ..:     url = 'http://' + url
          ..: 
          ..: url
      Out[1]: 'http://www.myurl.com'
      

      【讨论】:

        【解决方案4】:

        我认为你可以使用 urlparse 函数 :

        Python User Documentation

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-27
          • 2018-04-01
          • 2012-07-13
          • 2013-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多