📌  相关文章
📜  阅读:https_www.tumblr.com URL = HTTPS:www.tumblr.com登录redirect_to的=%2Fneue_web%2Fiframe%2Freblog%2F629907744681590784%2FjQw7OUs8&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72 = a52e06db-92b6-4b86-b3c5-fa2ab267405c - ? Python (1)

📅  最后修改于: 2023-12-03 15:42:23.359000             🧑  作者: Mango

Python:解析和拆分URL

如果你需要从URL中提取或改变某些参数,或者要将一个URL拆分为不同的部分,那么Python中有一个内置的urllib.parse库可以帮你完成这些任务。这篇文章将介绍如何使用Python解析URL并拆分其各个部分。

解析URL

要解析一个URL,我们可以使用 urlparse方法。下面是一个示例的URL:

https://www.tumblr.com/login?redirect_to=%2Fneue_web%2Fiframe%2Freblog%2F629907744681590784%2FjQw7OUs8&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72=a52e06db-92b6-4b86-b3c5-fa2ab267405c

让我们使用Python的urllib.parse库来解析这个URL吧。

from urllib.parse import urlparse

url = 'https://www.tumblr.com/login?redirect_to=%2Fneue_web%2Fiframe%2Freblog%2F629907744681590784%2FjQw7OUs8&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72=a52e06db-92b6-4b86-b3c5-fa2ab267405c'

parsed_url = urlparse(url)

print(parsed_url)

输出结果:

ParseResult(scheme='https', netloc='www.tumblr.com', path='/login', params='', query='redirect_to=%2Fneue_web%2Fiframe%2Freblog%2F629907744681590784%2FjQw7OUs8&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72=a52e06db-92b6-4b86-b3c5-fa2ab267405c', fragment='')

我们可以看到,解析URL的结果是一个namedtuple对象,包含了URL中各部分的信息。具体来说,我们可以得到以下属性:

  • scheme:URL的协议(这里是“https”)
  • netloc:URL的网络位置(这里是“www.tumblr.com”)
  • path:URL的路径(这里是“/login”)
  • params:URL的参数(如果有的话),这个例子中没有参数,所以为空
  • query:URL的查询参数(这里是“redirect_to=%2Fneue_web%2Fiframe%2Freblog%2F629907744681590784%2FjQw7OUs8&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72=a52e06db-92b6-4b86-b3c5-fa2ab267405c”)
  • fragment:URL的片段标识符(如果有的话),这个例子中没有片段标识符,所以为空
拆分URL

如果需要修改URL中的某些参数,我们需要将其拆分为各个部分,然后再重新构建URL。这可以通过urllib.parse库中的urlunparse方法来实现。

下面的示例将从上面的url中提取出分别提取出scheme、netloc、path和query,然后再将它们拼接成一个新的URL:

from urllib.parse import urlparse, urlunparse, urlencode

url = 'https://www.tumblr.com/login?redirect_to=%2Fneue_web%2Fiframe%2Freblog%2F629907744681590784%2FjQw7OUs8&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72=a52e06db-92b6-4b86-b3c5-fa2ab267405c'

parsed_url = urlparse(url)

# 获取URL的各个部分
scheme = parsed_url.scheme
netloc = parsed_url.netloc
path = parsed_url.path
query = parsed_url.query

# 将query字符串转为字典
query_dict = dict(qc.split("=", 1) for qc in query.split("&"))

# 修改需要修改的参数(redirect_to),然后再将字典转回query字符串
query_dict['redirect_to'] = '/new_path'
new_query = urlencode(query_dict)

# 构造出新的URL
new_url = urlunparse((scheme, netloc, path, '', new_query, ''))

print(new_url)

输出结果:

https://www.tumblr.com/login?redirect_to=%2Fnew_path&3739a18c-0c68-43cc-a4cb-b8b99e9bfd72=a52e06db-92b6-4b86-b3c5-fa2ab267405c

在这个示例中,我们首先使用urlparse方法获取了URL中各个部分的信息,然后使用urlencode方法将query字符串转换为字典。接着,我们修改了需要修改的参数(这里是“redirect_to”),然后再使用urlencode方法将字典转换成新的query字符串。最后,使用urlunparse方法将各部分组合成了一个新的URL。

结论

Python中的urllib.parse库提供了一个方便的方法来解析和拆分URL。使用这个库,我们可以快速获取一个URL的各个部分,并且可以轻松地修改一个URL的参数等信息。希望这篇文章对你有所帮助。