urllib2.quote不能正常工作

2024-05-16 23:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到包含变音符号的网页的html。问题是urllib2.quote似乎没有按我预期的那样工作。

就我而言,quote应该将包含变音符号的url转换为正确的url。

下面是一个例子:

url = 'http://www.example.com/vydavatelství/'

print urllib2.quote(url)

>> http%3A//www.example.com/vydavatelstv%C3%AD/

问题是它由于某种原因更改了http//字符串。然后urllib2.urlopen(req)返回错误:

response = urllib2.urlopen(req)
File "C:\Python27\lib\urllib2.py", line 154, in urlopen return opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 437, in open response = meth(req, response)
File "C:\Python27\lib\urllib2.py", line 550, in http_response 'http', request, response, code, msg, hdrs)
File "C:\Python27\lib\urllib2.py", line 475, in error return self._call_chain(*args)
File "C:\Python27\lib\urllib2.py", line 409, in _call_chain result = func(*args)
File "C:\Python27\lib\urllib2.py", line 558, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request


Tags: inpyhttpurlresponselibline符号
1条回答
网友
1楼 · 发布于 2024-05-16 23:39:54

--TL;DR--

两件事。首先确保在python脚本的顶部包含shebang # -- coding: utf-8 --。这让python知道如何对文件中的文本进行编码。第二件事,您需要指定安全字符,这些字符不是由quote方法转换的。默认情况下,只有/被指定为安全字符。这意味着:正在被转换,这会破坏您的URL。

url = 'http://www.example.com/vydavatelství/'
urllib2.quote(url,':/')
>>> http://www.example.com/vydavatelstv%C3%AD/

——关于这个的更多信息--

所以这里的第一个问题是urllib2的文档非常糟糕。从Kamal提供的链接来看,在文档中没有提到quote方法。这使得解决问题相当困难。

说到这里,让我解释一下。

urllib2.quote的工作原理似乎与urllib的quote实现相同,后者是documented pretty well。urllib2.quote()接受四个参数

urllib.parse.quote(string, safe='/', encoding=None, errors=None)
##   string: string your trying to encode
##     safe: string contain characters to ignore. Defualt is '/'
## encoding: type of encoding url is in. Default is utf-8
##   errors: specifies how errors are handled. Default is 'strict' which throws a UnicodeEncodeError, I think.

相关问题 更多 >