【问题标题】:Proper way to fix a url without http://在没有 http:// 的情况下修复 url 的正确方法
【发布时间】:2015-08-01 23:57:45
【问题描述】:

我正在尝试open 这种格式的网址列表,使用Urllib2

google.com
facebook.com
youtube.com
yahoo.com
baidu.com

使用这种方法:

urllib2.urlopen(url):

得到这个错误:

File "fetcher.py", line 98, in fetch_urls_and_save
  response = urllib2.urlopen(url)
File "urllib2.py", line 154, in urlopen
  return opener.open(url, data, timeout)
File "urllib2.py", line 423, in open
  protocol = req.get_type()
File "urllib2.py", line 285, in get_type
  raise ValueError, "unknown url type: %s" % self.__original

所以,我的问题是:

是否有适当的方法来“修复”这些 url,或者我应该在每个字符串前面简单地附加 http://?我认为这不是最好的解决方案,因为以https:// 开头的网址呢?

【问题讨论】:

  • 只需前缀http://。有一个服务器可以和你进行 HTTP 通信,它会返回200 OK。如果它想使用 HTTPS,它将使用 301 重定向。
  • 此页面上的所有示例都显示“http://”。 docs.python.org/2/howto/urllib2.html Lutz 是正确的,请检查 HTTP 状态以进行重定向。
  • 你的意思是如果我得到301,我应该尝试https://?还是会自动重定向?
  • @bmpasini,301 代码表示重定向。是否要重定向(使用https:// 请求页面)由您决定。
  • 严格来说,这些根本不是 URL。在许多人类上下文中,您可以省略协议说明符部分并且仍然可以理解,但是如果没有那种上下文,您所拥有的只是(明显的)服务器名称列表,其中一些或全部可能正在运行 HTTP 服务器它响应对该特定域名的请求。当然,添加http:// 前缀并尝试是找出答案的好方法。

标签: python url urllib2 urllib


【解决方案1】:

我建议将http:// 附加到字符串,因为许多使用https:// 方案的站点通过重定向请求自动切换到它。

您可以使用getcode() 函数检查urlopen 返回的状态。

a=urllib2.urlopen("http://google.com")
print a.getcode() # prints 200

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多