我正在尝试获取包含变音符号(í,č...)的页面的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:错误请求
答案 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.