ValueError: urllib2中未知的URL类型,浏览器中正常打开

27 投票
4 回答
53137 浏览
提问于 2025-04-16 16:36

基本上,我想用Python中的urllib2来下载一个网址。

代码如下:

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

运行后出现了ValueError错误,程序崩溃了,示例中的网址就是这样。

但是当我在浏览器中打开这个网址时,一切正常。

有没有什么办法可以解决这个问题呢?

更新:

感谢Ben James和sth,问题被发现了 => 需要加上'http://'前缀。

现在问题变得更清楚了:有没有可能用某个内置函数自动处理这种情况,还是说我必须通过后续的字符串拼接来处理错误?

4 个回答

1

你可以使用Python 3中的urllib库里的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'
7

你需要使用完整的网址,包括协议部分,而不仅仅是写一个主机名。

正确的网址应该是 http://www.tattoo-cover.co.uk/

46

当你在浏览器里输入一个网址,但没有加上协议时,浏览器会默认使用HTTP协议。可是,urllib2这个库不会自动帮你加上这个协议;你需要自己在网址前面加上http://

撰写回答