Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修复不带http的url的正确方法://_Python_Url_Urllib2_Urllib - Fatal编程技术网

Python 修复不带http的url的正确方法://

Python 修复不带http的url的正确方法://,python,url,urllib2,urllib,Python,Url,Urllib2,Urllib,我正试图在Urllib2中使用打开此格式的URL列表: 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 r

我正试图在
Urllib2
中使用
打开此格式的URL列表:

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://
开头的URL呢?

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

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

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

我建议将
http://
添加到字符串中,因为使用
https://
方案的站点会通过重定向请求自动切换到该字符串

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

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

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