Python 中的 Urljoin 简介
本篇文章介绍了 Python urljoin 及其使用时的行为。 它还使用不同的示例代码演示了在 Python 中使用 urljoin。
介绍Python中的urljoin及其使用方法
URL通常包含了在评估网站、参与者搜索或区分不同领域的材料时所需的关键信息。
尽管URL可能看起来相当复杂,但Python提供了许多有价值的库,可以解析、连接URL并检索URL的组成部分。
Python 3中的urllib包使用户能够从脚本内部探索网站,并包含了几个模块来管理URL函数,如urljoin()。
在Python编程中使用URL时,urllib库至关重要,它允许用户使用通用资源定位符(URL)访问和与网站交互。
此外,该库还提供了更多的包,如urllib.request、urllib.error、urllib.parse和urllib.robotparser。
使用urljoin()方法
urljoin()方法在需要多个相关URL的情况下非常有用。例如,用于为网站生成一组页面的URL以及向基本URL添加新值。
语法:
urljoin(baseurl, newurl, allowFrag=None)
通过将基本URL(baseurl)与另一个URL(newurl)组合构建完整的URL,urljoin()方法使用基本URL的部分作为地址方案、网络位置和路径,以提供相对URL中缺失的部分。
例如:
from urllib.parse import urljoin
print(urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', 'FAQ.html'))
输出结果:
'http://www.cwi.nl:50/%7Eguido/FAQ.html'
allowFrag参数具有与 urlparse()
相同的含义和默认值。如果newurl是以 //
或 scheme://
开头的绝对URL,则输出中将包含newurl的主机名和/或方案。例如:
from urllib.parse import urljoin
print(urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', '//www.python.org/%7Eguido'))
输出结果:
'http://www.python.org/%7Eguido'
如果输出结果与预期不符,请使用urlsplit()和urlunsplit()预处理newurl,以分离可能的方案和网络位置部分。
如果您对这些函数的功能感兴趣,可以简要描述一下urlparse()、urlsplit()和urlunsplit()的功能:
- urlparse() - 该模块使用户能够快速将URL分解为不同的部分,并从URL中筛选出特定的部分。
-
urlsplit() - 该模块是
urlparse()
的一种替代方法,但不同之处在于它不会将参数从URL中分割出来。urlsplit()
模块对于遵循RFC 2396的URL非常有用,该规范支持每个路径段的参数。 -
urlunsplit() - 该模块的功能是将由
urlsplit()
返回的元组的元素组合成一个完整的URL字符串。
使用urljoin()模块构建URLs
Python中的requests模块可以帮助构建URL并动态地操作URL值。可以以编程方式获取URL的任何子目录,然后使用新值替换URL的某些部分来构建新的URL。
以下代码使用 urljoin()
方法在URL路径中获取不同的子文件夹。urljoin()
用于向基本URL添加新值,从而构建URL。
from requests.compat import urljoin
base = 'https://stackoverflow.com/questions/10893374'
print(urljoin(base, '.'))
print(urljoin(base, '..'))
print(urljoin(base, '...'))
print(urljoin(base, '/10893374/'))
url_query = urljoin(base, '?vers=1.0')
print(url_query)
url_sec = urljoin(url_query, '#section-5.4')
print(url_sec)
输出结果:
https://stackoverflow.com/questions/
https://stackoverflow.com/
https://stackoverflow.com/questions/...
https://stackoverflow.com/10893374/
https://stackoverflow.com/questions/10893374?vers=1.0
https://stackoverflow.com/questions/10893374?vers=1.0#section-5.4
是否有一种方法可以在Python中拆分URL?当然可以!
我们可以将URL分成许多组件,超出主要地址。使用urlphase()方法可以将用于特定查询或附加到URL的标签分开,如下所示。
from requests.compat import urlparse
url_01 = 'https://docs.python.org/3/library/__main__.html?highlight=python%20hello%20world'
url_02 = 'https://docs.python.org/2/py-modindex.html#cap-f'
print(urlparse(url_01))
print(urlparse(url_02))
输出结果:
ParseResult(scheme='https', netloc='docs.python.org', path='/3/library/__main__.html', params='', query='highlight=python%20hello%20world', fragment='')
ParseResult(scheme='https', netloc='docs.python.org', path='/2/py-modindex.html', params='', query='', fragment='cap-f')
使用urljoin()构建URLs
下面的示例代码显示并解释了从不同部分构建URL的行为,以了解从urllib.parse导入的 urljoin()
方法的行为。
from urllib.parse import urljoin
print(urljoin('test', 'task'))
print(urljoin('http://test', 'task'))
print(urljoin('http://test/add', 'task'))
print(urljoin('http://test/add/', 'task'))
print(urljoin('http://test/add/', '/task'))
print(urljoin('test', 'task'))
以上代码中,第一个参数可以被视为baseurl(假设urljoin()的语法),可以等同于浏览器上显示的页面。
第二个参数newurl可以被视为该页面上锚点的href。作为结果,当用户点击时,最终的URL将指向一个页面。
当考虑虚拟托管方面和类似Baz的锚点时,人们还可以将baseurl包括方案和域。
from urllib.parse import urljoin
print(urljoin('http://test', 'task'))
输出结果:
'http://test/task'
在上面的示例中,链接将用户指向URL,考虑了虚拟托管方面和类似 <a href='task'>Baz</a>
的锚点。
from urllib.parse import urljoin
print(urljoin('http://test/add', 'task'))
输出结果:
'http://test/task'
如上所示,添加另一部分test/add将创建指向task的相对链接,该链接将用户指向上述URL。
from urllib.parse import urljoin
print(urljoin('http://test/add/', 'task'))
输出结果:
'http://test/add/task'
这里添加了test/add/,将会指向不同的相对链接:test/add/task。
from urllib.parse import urljoin
print(urljoin('http://test/add/', '/task'))
输出结果:
'http://test/task'
如果用户在 test/add/ 上并且href为/task,它将链接用户到test/task。因此,我们可以说Python中的 urljoin()
是一个有用的函数,可以根据需要解决URL问题。
相关文章
Python 中并发方面的差异
发布时间:2023/06/21 浏览次数:67 分类:Python
-
本文将讨论如何在Python中实现并发以及其优点和缺点。线程和多线程 线程在Python中已经存在很长时间了。
Python 中从线程获取返回值
发布时间:2023/06/21 浏览次数:145 分类:Python
-
这篇文章首先讨论了线程的基础知识,并提供了一个在Python中启动线程的代码示例。然后,我们将讨论一个在线程中获取函数返回值的代码。
在 Python 中从文本创建 N-Grams
发布时间:2023/06/21 浏览次数:65 分类:Python
-
本文将讨论如何使用 Python 中的功能和库创建 n-gram。使用 for 循环在 Python 中从文本创建 n-gram 我们可以有效地创建一个 ngrams 函数,该函数接受文本和 n 值,并返回一个包含 n-gram 的列表。
用于 Python 的 Vim 自动完成
发布时间:2023/06/21 浏览次数:180 分类:Python
-
Vim(Vi Improved的缩写)是一款功能强大的文本编辑器,常被作为Python开发环境的首选。本文将探讨Vim及其用于Python的自动补全功能。
Python 数独求解器
发布时间:2023/06/21 浏览次数:187 分类:Python
-
本文介绍了我们如何使用 Python 来解决数独问题。 通过适应回溯算法,它可以作为一个准确的数独解算器。
Python Quine 介绍
发布时间:2023/06/21 浏览次数:167 分类:Python
-
一个Quine是一个产生其源代码作为输出的计算机程序。Quine很有趣,因为它们似乎违背了编程的目的,即根据输入生成输出。运行Python Quine
Python 复利计算器
发布时间:2023/06/21 浏览次数:172 分类:Python
-
Python是用于金融分析的优秀语言,其中之一是可以使用Python计算复利。复利是指利息不仅仅在本金(原始金额)上支付,还包括已累计的利息。本文将讨论Python复利函数。
Python中内存缓存的使用
发布时间:2023/06/21 浏览次数:171 分类:Python
-
本文将讨论准备内存缓存操作和主要的 Memcached 用法。 它还将讨论使用 Python 缓存和设置的高级模式。
Python 缓存库
发布时间:2023/06/21 浏览次数:197 分类:Python
-
Python 缓存库是必不可少的,因为它允许系统管理缓存。 缓存库可以通过提供一种访问缓存数据和管理缓存的方法来帮助提高系统性能。