urllib2.quote无法正常工作

时间:2015-04-12 21:28:08

标签: python html url urllib2

我正在尝试获取包含变音符号(í,č...)的页面的HTML。问题是urllib2.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)
    在urlopen中输入文件“C:\ Python27 \ lib \ urllib2.py”,第154行           return opener.open(url,data,timeout)         文件“C:\ Python27 \ lib \ urllib2.py”,第437行,处于打开状态           response = meth(req,response)
        在http_response中的文件“C:\ Python27 \ lib \ urllib2.py”,第550行           'http',请求,响应,代码,消息,hdrs)
        文件“C:\ Python27 \ lib \ urllib2.py”,第475行,出错           return self._call_chain(* args)
        文件“C:\ Python27 \ lib \ urllib2.py”,第409行,在_call_chain中           result = func(* args)
        在http_error_default中的文件“C:\ Python27 \ lib \ urllib2.py”,第558行           引发HTTPError(req.get_full_url(),代码,msg,hdrs,fp)
      urllib2.HTTPError:HTTP错误400:错误请求

1 个答案:

答案 0 :(得分:6)

- TL; DR -

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

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

- 对此更多一点 -

所以这里的第一个问题是urllib2的文档很差。关闭Kamal提供的链接,我没有在文档中提及quote方法。这使得解决问题非常困难。

话虽如此,让我解释一下。

urllib2.quote似乎与urllib的引用实现相同,即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.