栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Python urlopen提取非ASCII网址?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Python urlopen提取非ASCII网址?

严格来说URI不能包含非ASCII字符;您所拥有的是一个IRI。

要将IRI转换为纯ASCII URI,请执行以下操作:

  • 地址的主机名部分中的非ASCII字符必须使用基于Punypre的IDNA算法进行编码;

  • 根据Ignacio的回答,路径中的非ASCII字符以及地址的大多数其他部分必须使用UTF-8和%-encoding进行编码。

所以:

import re, urlparsedef urlEnpreNonAscii(b):    return re.sub('[x80-xFF]', lambda c: '%%%02x' % ord(c.group(0)), b)def iriToUri(iri):    parts= urlparse.urlparse(iri)    return urlparse.urlunparse(        part.enpre('idna') if parti==1 else urlEnpreNonAscii(part.enpre('utf-8'))        for parti, part in enumerate(parts)    )>>> iriToUri(u'http://www.au0131b.com/au0131b')'http://www.xn--ab-hpa.com/a%c4%b1b'

(从技术上讲,这在一般情况下还是不够好,因为

urlparse
它不会在主机名上拆分任何
user:pass@
前缀或
:port
后缀。仅主机名部分应经过IDNA编码。使用常规代码
urllib.quote
.enpre('idna')
在您使用时更容易编码构造一个URL,而不必将IRI分开。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659756.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号