我需要唯一地标识和存储一些URL。问题在于有时它们会包含“
..”,就像http://somedomain.com/foo/bar/../../some/url
基本上,http://somedomain.com/some/url
如果我没记错的话。
是否有Python函数或复杂的方法来解析此URL?
有一个简单的解决方案使用urllib.parse.urljoin
:
>>> from urllib.parse import urljoin
>>> urljoin('http://www.example.com/foo/bar/../../baz/bux/', '.')
'http://www.example.com/baz/bux/'
但是,如果没有结尾斜杠(最后一个组件是文件,而不是目录),则最后一个组件将被删除。
此修复程序使用urlparse函数提取路径,然后使用(的posixpath版本)os.path
对组件进行规范化。用斜杠补偿一个神秘的问题,然后将URL重新连接在一起。以下是doctest
能够的:
from urllib.parse import urlparse
import posixpath
def resolve_components(url):
"""
>>> resolve_components('http://www.example.com/foo/bar/../../baz/bux/')
'http://www.example.com/baz/bux/'
>>> resolve_components('http://www.example.com/some/path/../file.ext')
'http://www.example.com/some/file.ext'
"""
parsed = urlparse(url)
new_path = posixpath.normpath(parsed.path)
if parsed.path.endswith('/'):
# Compensate for issue1707768
new_path += '/'
cleaned = parsed._replace(path=new_path)
return cleaned.geturl()
问题内容: 如何使用python从.pcap文件或接口解析数据包? 我特别在寻找使用记录良好的库的解决方案。 问题答案: 尝试scapy。它是用于数据包检查,处理和创建的功能非常强大的程序。 您可以使用它来构建自己的工具。
问题内容: 我正在尝试解析某些网页以供将来使用。为了解析网页,我使用了urllib,lxml,BeautifulSoup,HTMLParser等不同的模块来实现我的目标。 在解析网页时,我没有遇到任何问题,直到遇到隐藏标签为止。 当我使用Chrome浏览器打开页面并使用开发人员工具查看页面元素时,我能够看到部分代码: 并且只需手动复制/粘贴即可。 我需要从这个隐藏标签中进行解析。为什么我可以使用p
问题内容: 我正在尝试使用具有库重复键的无效结构解析json 。如果json中有重复的键,我想将它们提取为。 我要解析的示例(我要解析的实际json来自json导出): 但是,由于此json具有重复键,因此仅保留了最后一个值: 我也试过了具有支持的模块,但是它不能像预期的那样用于嵌套json对象。 将Guava模块用于之前显示的json的示例: 我应该如何使用库解决此问题?是否还有其他支持Java
问题内容: 在我的网站中,我尝试将字符串转换为包含换行符的JSON。 这将产生“意外令牌”错误。我需要以某种方式逃脱吗? 问题答案: 是的,您应该同时退出这两个字符,因为它们都属于控制字符列表。您可以在此处找到需要转义的字符的完整列表。您的代码将是 JSFiddle:链接
我想创建一个debian包,当安装时,它将用pip安装几个python包。我能想到两种方法: > 将python包安装到一个目录中,然后从该目录生成一个debian包。但这会混淆构建主机(例如其pip元数据),尤其是在主机已经安装了其中一些包的情况下。 用所有python包制作一个debian包,在debian安装和卸载过程中,运行一些脚本来安装/卸载python包。但是这将需要另外两个脚本来维护
我有一个来自Facebook的“下载您的数据”功能的JSON文件,它不是将Unicode字符作为其代码点号转义,而是作为UTF-8字节序列转义。 例如,字母á (U 00E1)在JSON文件中转义为< code>\u00c3\u00a1,而不是< code>\u00e1。0xC3 0xA1是U 00E1的UTF-8编码。 Python 3中的< code>json库将其解码为,对应于U 00C3和