如何将URL分为三个不同的变量

时间:2019-07-17 02:26:29

标签: python python-3.x split

我想将一个URL分成三个字符串。 示例:

public class Favorite implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "element")
    private String element;

    @ManyToOne
    @JoinColumn(name = "user_fk")
    User user;

我希望输出为:

{
  "element": "string",
  "user": {
    "email": "string",
    "id": 0,
    "life": "suspend",
    "name": "string",
    "password": "string"
  }
}

以上输出基于提供的示例。基本上,我想将字符串分成https://www.google.com:443 http://amazon.com:467 string 1: https or http string 2: www.google.com or amazon.com string 3: 443 or 467 protocol并分配给三个不同的变量。

3 个答案:

答案 0 :(得分:6)

ULR比人们想象的要复杂,这就是为什么使用经过验证的代码来解析它们并处理意外边缘情况通常是一个好主意的原因。 Python在库中有urllib.parse,您应该使用它而不是尝试自己解析。

所需的部分位于scheme返回的对象的hostnameporturlsparse()属性中

例如:

from urllib.parse import urlparse

def getParts(url_string):
    p = urlparse(url_string)
    return [p.scheme, p.hostname, p.port]

getParts('https://www.google.com:443')
# ['https', 'www.google.com', 443]

getParts('http://amazon.com:467')
# ['http', 'amazon.com', 467]

# surprising, but valid url:
getParts('https://en.wikipedia.org:443/wiki/Template:Welcome')
# ['https', 'en.wikipedia.org', 443]

# missing parts:
getParts('//www.google.com/example/home')
# ['', 'www.google.com', None]

答案 1 :(得分:1)

您在这里:

url = 'https://www.google.com:443'

first = url.find(':')
last = url.rfind(':')

protocol = url[:first]
domain = url[first+3:last]
port = url[last+1:]

答案 2 :(得分:0)

一种“原始”方法:

from collections import namedtuple

def split_url(url):
    split_1 = url.split('://')
    split_2 = split_1[1].split(':')
    protocol = split_1[0]
    domain = split_2[0]
    port = split_2[1]

    url_split = namedtuple('url_split', ['protocol', 'domain', 'port'])
    return url_split(protocol, domain, port)

例如,

s = 'https://www.google.com:443'
result = split_url(s)

那么我们有:

result.protocol
>> 'https'

result.domain
>> 'www.google.com'

result.port
>> '443'