含变音符号与特殊字符的URL用requests请求报UnicodeDecodeError求助
使用requests获取含特殊字符URL时的UnicodeDecodeError问题
我尝试用requests库获取页面HTML内容时,出现了UnicodeDecodeError错误。可复现代码如下:
import requests import urllib url = "https://www.unique.nl/vacature/coördinator-facilitair-(v2037635)"
我试过以下几种方式,均返回UnicodeDecodeError:
尝试1:
requests.get(url)
尝试2:
requests.get(requests.utils.requote_uri(url))
尝试3:
requests.get(urllib.parse.quote(url))
尝试4:
requests.get(urllib.parse.quote(url.encode("Latin-1"), ":/"))
另外,我还尝试将URL编码为utf-8、latin1或unicode_escape,也无法解决问题。我到底忽略了什么?
完整错误信息:
File /usr/local/lib/python3.9/site-packages/requests/api.py:75, in get(url, params, **kwargs) 64 def get(url, params=None, **kwargs): 65 r"""Sends a GET request. 66 67 :param url: URL for the new :class:`Request` object. (...) 72 :rtype: requests.Response 73 """ ---> 75 return request('get', url, params=params, **kwargs) File /usr/local/lib/python3.9/site-packages/requests/api.py:61, in request(method, url, **kwargs) 57 # By using the 'with' statement we are sure the session is closed, thus we 58 # avoid leaving sockets open which can trigger a ResourceWarning in some 59 # cases, and look like a memory leak in others. 60 with sessions.Session() as session: ---> 61 return session.request(method=method, url=url, **kwargs) File /usr/local/lib/python3.9/site-packages/requests/sessions.py:542, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 537 send_kwargs = { 538 'timeout': timeout, 539 'allow_redirects': allow_redirects, 540 } 541 send_kwargs.update(settings) --> 542 resp = self.send(prep, **send_kwargs) 544 return resp File /usr/local/lib/python3.9/site-packages/requests/sessions.py:677, in Session.send(self, request, **kwargs) 674 if allow_redirects: 675 # Redirect resolving generator. 676 gen = self.resolve_redirects(r, request, **kwargs) --> 677 history = [resp for resp in gen] 678 else: 679 history = [] File /usr/local/lib/python3.9/site-packages/requests/sessions.py:677, in <listcomp>(.0) 674 if allow_redirects: 675 # Redirect resolving generator. 676 gen = self.resolve_redirects(r, request, **kwargs) --> 677 history = [resp for resp in gen] 678 else: 679 history = [] File /usr/local/lib/python3.9/site-packages/requests/sessions.py:150, in SessionRedirectMixin.resolve_redirects(self, resp, req, stream, timeout, verify, cert, proxies, yield_requests, **adapter_kwargs) 146 """Receives a Response. Returns a generator of Responses or Requests.""" 148 hist = [] # keep track of history --> 150 url = self.get_redirect_target(resp) 151 previous_fragment = urlparse(req.url).fragment 152 while url: File /usr/local/lib/python3.9/site-packages/requests/sessions.py:116, in SessionRedirectMixin.get_redirect_target(self, resp) 114 if is_py3: 115 location = location.encode('latin1') --> 116 return to_native_string(location, 'utf8') 117 return None File /usr/local/lib/python3.9/site-packages/requests/_internal_utils.py:25, in to_native_string(string, encoding) 23 out = string.encode(encoding) 24 else: ---> 25 out = string.decode(encoding) 27 return out UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 29: invalid start byte
内容的提问来源于stack exchange,提问作者Zal
相关产品推荐
相关产品推荐

