【问题标题】:urllib2.quote does not work properlyurllib2.quote 无法正常工作
【发布时间】:2015-06-18 03:28:22
【问题描述】:

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

响应 = urllib2.urlopen(req)
文件“C:\Python27\lib\urllib2.py”,第 154 行,在 urlopen 返回 opener.open(url, 数据, 超时) 文件“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 行,错误 返回 self._call_chain(*args)
_call_chain 中的文件“C:\Python27\lib\urllib2.py”,第 409 行 结果 = func(*args)
http_error_default 中的文件“C:\Python27\lib\urllib2.py”,第 558 行 引发 HTTPError(req.get_full_url(), 代码, msg, hdrs, fp)
urllib2.HTTPError:HTTP 错误 400:错误请求

【问题讨论】:

  • 你试过把# -- coding: utf-8 -- 放在你的脚本顶部吗??

标签: python html url urllib2


【解决方案1】:

-- TL;DR--

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

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2016-09-01
    • 2012-07-11
    • 2018-04-08
    • 2017-04-20
    • 2018-10-02
    • 2016-09-04
    相关资源
    最近更新 更多