URL 编码和取消缩短

URL encoding and unshortening

我有一些链接是从站点地图和推特上收集的。问题是有些链接是阿拉伯语的,比如这个:

https://www.aljazeera.net/videos/2021/3/1/ياقوتيا-مدينة-روسية-يتجمد-فيها-كل-شيء

我正在尝试取消缩短的 Twitter 链接并解码阿拉伯语编码链接以获得如下所示的链接:

https://www.aljazeera.net/videos/2021/3/1/%D9%8A%D8%A7%D9%82%D9%88%D8%AA%D9%8A%D8%A7-%D9%85%D8%AF%D9%8A%D9%86%D8%A9-%D8%B1%D9%88%D8%B3%D9%8A%D8%A9-%D9%8A%D8%AA%D8%AC%D9%85%D8%AF-%D9%81%D9%8A%D9%87%D8%A7-%D9%83%D9%84-%D8%B4%D9%8A%D8%A1

如果您的目标是将其中包含奇数字符的 url 转换为 %XX 格式,您可以使用 python 的内置函数,urllib, 解码 link:

>>> import urllib
>>> oddlink = 'https://www.aljazeera.net/videos/2021/3/1/ياقوتيا-مدينة-روسية-يتجمد-فيها-كل-شيء'
>>> goodlink = urllib.parse.quote(oddlink)
>>> print(goodlink)
https%3A//www.aljazeera.net/videos/2021/3/1/%D9%8A%D8%A7%D9%82%D9%88%D8%AA%D9%8A%D8%A7-%D9%85%D8%AF%D9%8A%D9%86%D8%A9-%D8%B1%D9%88%D8%B3%D9%8A%D8%A9-%D9%8A%D8%AA%D8%AC%D9%85%D8%AF-%D9%81%D9%8A%D9%87%D8%A7-%D9%83%D9%84-%D8%B4%D9%8A%D8%A1

请记住,它会将 https 之后的 : 解析为 %3A。您可以手动覆盖它:

>>> goodlink = goodlink[0:5] + ':' + goodlink[6:]
>>> print(goodlink)
https://www.aljazeera.net/videos/2021/3/1/%D9%8A%D8%A7%D9%82%D9%88%D8%AA%D9%8A%D8%A7-%D9%85%D8%AF%D9%8A%D9%86%D8%A9-%D8%B1%D9%88%D8%B3%D9%8A%D8%A9-%D9%8A%D8%AA%D8%AC%D9%85%D8%AF-%D9%81%D9%8A%D9%87%D8%A7-%D9%83%D9%84-%D8%B4%D9%8A%D8%A1

或者,您可以将 : 添加为 'safe' 字符,这意味着 urllib.parse 将忽略它,并保留它:

>>> urllib.parse.quote(oddlink, safe='/:')

/ 是安全字符的一部分,因为它是 link 非常重要的一部分:

https://www.google.com/ #with slash
https:%2F%2Fwww.google.com%2F #without slash

/字符默认包含在安全字符中,但在更改安全字符时,需要确保包含它。