Mil*_*ano 6 html python 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/
Run Code Online (Sandbox Code Playgroud)
问题是它http//出于某种原因改变了字符串.然后urllib2.urlopen(req)返回错误:
response = urllib2.urlopen(req)
文件"C:\ Python27\lib\urllib2.py",第154行,在urlopen中返回opener.open(url,data,timeout)文件"C:\ Python27\lib\urllib2.py ",第437行,在开放响应中= meth(req,response)
文件"C:\ Python27\lib\urllib2.py",第550行,在http_response'htt',请求,响应,代码,消息,hdrs)
文件" C:\ Python27\lib\urllib2.py",第475行,错误返回self._call_chain(*args)
文件"C:\ Python27\lib\urllib2.py",第409行,在_call_chain result = func(*args) )
文件"C:\ Python27\lib\urllib2.py",第558行,在http_error_default中引发HTTPError(req.get_full_url(),代码,msg,hdrs,fp)urllib2.HTTPError
:HTTP错误400:错误请求
- TL; DR -
两件事情.首先确保你将你的shebang包含# -- coding: utf-8 --在python脚本的顶部.这让我们的python知道如何编码文件中的文本.第二,你需要指定安全字符,这些字符不是由quote方法转换的.默认情况下,仅将/其指定为安全字符.这意味着:正在转换,这会破坏您的URL.
url = 'http://www.example.com/vydavatelství/'
urllib2.quote(url,':/')
>>> http://www.example.com/vydavatelstv%C3%AD/
Run Code Online (Sandbox Code Playgroud)
- 再多一点 -
所以这里的第一个问题是urllib2的文档很差.关闭Kamal提供的链接,我没有提到quote文档中的方法.这使得解决问题非常困难.
话虽如此,让我解释一下.
urllib2.quote似乎与urllib的报价实现相同,这是很好的记录.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.
Run Code Online (Sandbox Code Playgroud)