- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
urlparse.parse_qs
对于解析 url 参数很有用,它可以很好地处理简单的 ASCII url,用 str
表示。所以我可以解析一个查询,然后使用 urllib.urlencode
从解析的数据中构建相同的路径:
>>> import urlparse
>>> import urllib
>>>
>>> path = '/?key=value' #path is str
>>> query = urlparse.urlparse(path).query
>>> query
'key=value'
>>> query_dict = urlparse.parse_qs(query)
>>> query_dict
{'key': ['value']}
>>> '/?' + urllib.urlencode(query_dict, doseq=True)
'/?key=value' # <-- path is the same here
它也可以正常工作,当 url 包含百分比编码的非 ASCII 参数时:
>>> value = urllib.quote(u'значение'.encode('utf8'))
>>> value
'%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
>>> path = '/?key=%s' % value
>>> path
'/?key=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
>>> query = urlparse.urlparse(path).query
>>> query
'key=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
>>> query_dict = urlparse.parse_qs(query)
>>> query_dict
{'key': ['\xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5']}
>>> '/?' + urllib.urlencode(query_dict, doseq=True)
'/?key=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5' # <-- path is the same here
但是,当使用 django 时,我使用 request.get_full_path()
获取 url,并将路径作为 unicode
字符串返回:
>>> path = request.get_full_path()
>>> path
u'/?key=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5' # path is unicode
看看现在会发生什么:
>>> query = urlparse.urlparse(path).query
>>> query
u'key=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5'
>>> query_dict = urlparse.parse_qs(query)
>>> query_dict
{u'key': [u'\xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5']}
>>>
query_dict
包含 unicode 字符串,包含字节!不是unicode点!当然,在尝试对该字符串进行 urlencode 时,我遇到了 UnicodeEncodeError:
>>> urllib.urlencode(query_dict, doseq=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\Lib\urllib.py", line 1337, in urlencode
l.append(k + '=' + quote_plus(str(elt)))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
目前我有一个解决方案:
# just convert path, returned by request.get_full_path(), to `str` explicitly:
path = str(request.get_full_path())
所以问题是:
最佳答案
在将它传递给 .parse_qs()
之前, 使用 ASCII 编码回字节:
query_dict = urlparse.parse_qs(query.encode('ASCII'))
这与 str()
的作用相同,但使用显式编码。是的,这是安全的,URL 编码仅使用 ASCII 代码点。
parse_qs
被传递给一个 Unicode 值,所以它也返回给你一个 unicode 值;解码字节不是它的工作。
关于Python urlparse.parse_qs unicode url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614695/
登录网站后我想收集它的链接。这是我用这个函数做的(使用 mechanize 和 urlparse 库): br = mechanize.Browser() . . #logging in on web
我无法运行此代码,有人可以帮助我吗? import sys, urllib, re, urlparse from urllib import urlretrieve from BeautifulSou
我试图弄清楚为什么我会看到错误 ModuleNotFoundError: No module named 'urlparse'但我从不在我的代码中调用 urlparse。当我尝试使用 pip 安装 u
如果缺少“http”方案名称,我想在给定的 url 字符串前面添加它。否则,不要管 url,所以我认为 urlparse 是执行此操作的正确方法。但是每当没有方案并且我使用 get url 时,我会在
我在使用 https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-python 中的以下代码行时遇到问题 impor
我有两个系统: 第一个按预期工作: >>> urlparse.urlparse('foo://bar/?blu=1') ParseResult(scheme='foo', netloc='bar',
我正在尝试用 python 分隔 url 的不同部分s urlparse,但我似乎在结果中得到了错误的值。 baseline = runSql(conn,"Select url from malwar
我想知道是否有已知的解决方法来解决我在 python 的 urlparse 中看到的一些奇怪行为。 以下是 python 解释器中几行的一些结果: >>> import urlparse >>> ur
Python 的 urlparse 函数将 url 解析为六个部分(方案、netloc、路径和其他东西) 现在我发现解析“example.com/path/file.ext”不返回 netloc,而是
在Python的urlparse中,可以使用urlparse解析URL,然后parse_qsl解析query。 我想删除一个查询(名称、值)对,然后重建 URL。 有urlunparse方法,没有un
需要一种使用 Python urlparse 从 url 中提取不带子域的域名的方法。 例如,我想从 "http://www.google.com" 之类的完整网址中提取 "google.com"。
1、简介 urlparse模块用户将url解析为6个组件,并以元组形式返回,返回的6个部分,分别是:scheme(协议)、netloc(网络位置)、path(路径)、params(路径段参数)、
所以我有一个数据如下: item = '//s780.scene7.com/is/image/forever/301596014_001?hei=98&wid=98' 使用 urlparse 模块。
我正在制作一个解析 html 并从中获取图像的应用程序。使用 Beautiful Soup 可以轻松解析并下载 html,图像也可以使用 urllib2。 我确实在 urlparse 中遇到问题,无法
在从相对目录构造绝对 URL 时,是否有一种方法可以解决“无效”父目录的问题,还是我应该只使用 .replace()? >>> from urlparse import urljoin >>> url
这段简单的代码使 urlparse 变得疯狂,它没有正确获取主机名,而是将其设置为 None: from urllib.parse import urlparse parsed = urlparse(
其中URL parsing function pair我应该使用,为什么? urlparse和 urlunparse , 或 urlsplit和 urlunsplit ? 最佳答案 直接来自 the
当netloc为空时urlparse.urlunparse不一致: >>> urlparse.urlunparse(('http','','test_path', None, None, None))
我有以下代码,用于检查输入的 url 是否有效: #!/usr/bin/env python3 import sys import urllib.parse # ... def checkValidU
urlparse.parse_qs 对于解析 url 参数很有用,它可以很好地处理简单的 ASCII url,用 str 表示。所以我可以解析一个查询,然后使用 urllib.urlencode 从解
我是一名优秀的程序员,十分优秀!