urllib.request.urlopen:ValueError:未知网址类型

时间:2017-05-30 09:17:41

标签: python urllib urlopen

我对urllib.request有一个长期存在的问题。我做了什么:

wahlrecht = urllib.parse.quote("http://www.wahlrecht.de/umfragen/")
page = urllib.request.urlopen(url)

这是我得到的全部追溯:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/d069049/Documents/BCCN/Predictor/Backend/wahlrecht_polling_firms.py", line 72, in get_tables
    page = urllib.request.urlopen(wahlrecht)
  File "/Users/d069049/anaconda/envs/bccn2017/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/Users/d069049/anaconda/envs/bccn2017/lib/python3.6/urllib/request.py", line 511, in open
    req = Request(fullurl, data)
  File "/Users/d069049/anaconda/envs/bccn2017/lib/python3.6/urllib/request.py", line 329, in __init__
    self.full_url = url
  File "/Users/d069049/anaconda/envs/bccn2017/lib/python3.6/urllib/request.py", line 355, in full_url
    self._parse()
  File "/Users/d069049/anaconda/envs/bccn2017/lib/python3.6/urllib/request.py", line 384, in _parse
    raise ValueError("unknown url type: %r" % self.full_url)
ValueError: unknown url type: 'http%3A//www.wahlrecht.de/umfragen/'

2 个答案:

答案 0 :(得分:1)

您正在解析:就像它的args一样,您需要在不引用它的情况下打开URL。 否则,您尝试打开http%3A 以下行创建您的问题

wahlrecht = urllib.parse.quote("http://www.wahlrecht.de/umfragen/")

如果您将其更改为

wahlrecht = "http://www.wahlrecht.de/umfragen/"

它应该有用

答案 1 :(得分:0)

urllib.parse.quote()具有默认参数 safe ='/',该参数为"specifies additional ASCII characters that should not be quoted"。在您的网址中

“ http://www.wahlrecht.de/umfragen/”,

引用“ http ”之后的“ ”,并用“ %3A ”代替,因此它变为

http%3A // www.wahlrecht.de / umfragen / ”,

这将导致错误。您可以在 safe 参数中添加“ ”以避免被引用。例如,使用urllib.parse.quote("http://www.wahlrecht.de/umfragen/",safe=':/')