这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」
大年初一,大家可能都去拜年了,我祝大家春节快乐,虎年虎虎生威
昨天学习了怎样解析URL和拼成URL 今天去学习一下其他的拼网址的方法 详细代码ref:code
urljoin
urlparse和urlunsplit都可以完成链接的合并,不过前提都是要有特定长度的对象, 链接的每一部分都要清晰的分开. 除了着两种方法,我们还有其他的方法来生成链接.我们可以提供一个基础链接来进行拼接(basic_url) 作为方法的第一个参数,新的链接作为第二个参数,上例子:
from urllib.parse import urljoin
print(urljoin("https://www.baidu.com","FAQ.html"))
print(urljoin("https://www.baidu.com","https://cuiqingcai/FAQ.html"))
print(urljoin("https://www.baidu.com/about.html","https://cuiqingcai/FAQ.html"))
print(urljoin("https://www.baidu.com/about.html","https://cuiqingcai/FAQ.html?question=2"))
print(urljoin("https://www.baidu.com?wd=abc","https://cuiqingcai/FAQ.html/index.php"))
print(urljoin("https://www.baidu.com","?category=2#comment"))
print(urljoin("www.baidu.com","?category=2#comment"))
print(urljoin("https://www.baidu.com#comment","?category=2"))
得到运行的结果是:
https://www.baidu.com/FAQ.html
https://cuiqingcai/FAQ.html
https://cuiqingcai/FAQ.html
https://cuiqingcai/FAQ.html?question=2
https://cuiqingcai/FAQ.html/index.php
https://www.baidu.com?category=2#comment
www.baidu.com?category=2#comment
https://www.baidu.com?category=2
说实话真的是要找规律,仔细看了.我们要知道前提,第一个是基础链接,后一个才是目标链接
urljoin 会分析基础链接的scheme netloc和path这三个内容,并对新链接的缺失部分进行补充,最后返回结果,
如果新链接不存在这三项就予以补充,如果存在就使用新的连接里面的,基础链接是不起作用的
通过,urljoin的方法我们可以轻松地实现链接的解析 拼 和生成
urlencode
书上还介绍了一个常用方法,urlencode 它在构造GET请求参数的时候非常有用,举例说明
from urllib.parse import urlencode
params = {
'name':'flynt',
'age': "24"
}
base_url = "https://www.baidu.com"
url = base_url+urlencode(params)
print(url)
得到的结果:https://www.baidu.comname=flynt&age=24
很明显了,根本都不要解释说明这个代码的意思
parse_qs
反序列化,直接上例子吧:
from urllib.parse import parse_qs
from urllib.parse import urlencode
params = {
'name':'flynt',
'age': "24"
}
base_url = "https://www.baidu.com"
url = base_url+urlencode(params)
print(url)
print(parse_qs(url))
因为上一步书序列化,所以我直接偷懒了,直接让他反序列化, 得到的结果是:
parse_qsl
parse_qsl方法将参数转化为元组,看代码:
//这代码只多加了这一行
print(parse_qsl(url))
得到的结果略有不同:
https://www.baidu.comname=flynt&age=24
{'https://www.baidu.comname': ['flynt'], 'age': ['24']}
[('https://www.baidu.comname', 'flynt'), ('age', '24')]
很有趣,快学完基础知识了,再过几天就能学点厉害的了
一切顺利,加油