【发布时间】: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://前缀并尝试是找出答案的好方法。