Python拼接URL可以使用urllib.parse中的urljoin方法,urllib是Python中一个用于URL 处理的模块,urllib.parse 用于解析 URL,在之前分享的Python从路径|URL中获取文件名、文件后缀的方法中提到过使用其中的urlparse方法解析URL,感兴趣的可以去看看。
urllib.parse模块的的urlparse和urljoin刚好是两个相反的功能,urlparse是将 URL 解析成 ParseResult 对象,实现url的识别和分段。urljoin()方法则是将URL进行拼接、组合,也是在一些爬虫项目中比较常使用的功能,像拼接URL的话,我们在抓取网站上的相对链接就可以使用这个方法进行补全。
下面我们来看下使用urljoin拼接URL的具体代码:
urllib.parse模块的urljoin()方法介绍
from urllib.parse import urljoin
urljoin(base, url, allow_fragments=True)
通过合并一个 “基准 URL” (base) 和另一个 URL (url) 来构造一个完整 (“absolute”) URL。会使用基准 URL 的各部分,特别是地址协议、网络位置和 (一部分) 路径来提供相对 URL 中缺失的部分。如果第二个有完整的路径,则以第二个为主。
参数介绍
如果 allow_fragments 参数为假值,则片段标识符(URL中的锚点#….)不会被识别。
返回值说明
如果 url 为绝对 URL (即以 // 或 scheme:// 打头),则 url 的主机名和/或协议将出现在结果中。 例如:
urljoin('http://www.cwi.nl/%7Eguido/Python.html',
... '//www.python.org/%7Eguido')
'http://www.python.org/%7Eguido'
如果你不想要那样的行为,请使用 urlsplit()
和 urlunsplit()
对 url 进行预处理,移除可能存在的 scheme 和 netloc 部分。
urljoin()拼接url使用实例
# 连接两个参数的url, 将第二个参数中缺的部分用第一个参数的补齐
from urllib.parse import urljoin
print(urljoin('http://www.baidu.com','FAQ.html'))
# http://www.baidu.com/FAQ.html
print(urljoin('www.baidu.com', '?category=2#comment'))
# www.baidu.com?category=2#comment
# 如果第二个有完整的路径,则以第二个为主
print(urljoin('www.baidu.com', 'https://blog.csdn.net/nav/python'))
# https://blog.csdn.net/nav/python
特殊使用示例
传入两个毫不相干,相对完整的URL
结果为第二个URL
from urllib.parse import urljoin
print(urljoin('https://haha.com/index.html','https://baidu.com'))
#运行结果为 https://baidu.com
传入两个非常缺损的URL
from urllib.parse import urljoinprint(urljoin('www.bai.com','/index.html'))
#结果是 /index.html
所以说,最好不要这么做,否则会产生意想不到的结果。
上面部分代码懒得写了直接复制于:python url路径拼接 urllib.parse urljoin 简介
相关内容:
注意:请注意文档URL中的版本号,选择和自己Python对应的,如果不对应的访问后在选择。
官方文档地址:
https://docs.python.org/zh-cn/3/library/urllib.parse.html#urllib.parse.urljoin
模块官方文档地址:
https://docs.python.org/zh-cn/3/library/urllib.html
Python urllib 菜鸟教程
https://www.runoob.com/python3/python-urllib.html