我想以编程方式生成由这些部分组成的URL
固定部分
datatable
出站路由号码-更改
https://booking.snav.it/#/booking/rates/
出站日期-更改
1040
入站路由号-更改
19-02-2019
入站日期-更改
1042
参数:
20-02-2019
输出
"adults": "1"
"childs":"0"
"infants":"0"
"res": "0"
"vehicle":"0"
我知道如何使用https://booking.snav.it/#/booking/rates/1040/19-02-2019/1042/19-02-2019?adults=1&childs=0&infants=0&res=0&vehicle=0
urllib.parse.urlencode
但不知道如何动态生成固定URL params = urllib.parse.urlencode({
"adults": "1"
"childs":"0"
"infants":"0"
"res": "0"
"vehicle":"0"
})
url = "https://booking.snav.it/#/booking/rates/"
res = requests.get(url, params=params)
之后的第一部分
答案 0 :(得分:2)
URL实际上只是一个字符串,任何常用的字符串操作技术都可以在这里完成。您的组成部分中没有任何字符,也不需要在此处进行URL编码,从而使整个过程更加简单。
如果您的某些组成部分确实使用了list of unreserved characters中没有的字符,请使用urllib.parse.quote()
function将这些字符转换为URL安全组件。
您可以将str.join()
与/
结合使用来连接字符串部分:
outbound_route = '1040'
outbound_date = '19-02-2019'
inbound_route = '1042'
inbound_date = '20-02-2019'
url = "https://booking.snav.it/#/booking/rates" # no trailing /
final_url = '/'.join([url, outbound_route, outbound_date, inbound_route, inbound_date])
或者您可以使用formatted string literal:
url = "https://booking.snav.it/#/booking/rates/"
final_url = f'{url}{outbound_route}/{outbound_date}/{inbound_route}/{inbound_date}'
这种方法的优点是组件不必是字符串。如果outbound_route
和inbound_route
是整数,则不必先将它们显式转换为字符串。
或者,由于URL路径的工作方式与POSIX文件系统路径非常相似,因此您可以使用pathlib.PosixPurePath()
class来构造路径:
from pathlib import PosixPurePath
path = PosixPurePath('/booking/rates') / outbound_route / outbound_date / inbound_route / inbound_date
final_url = f"https://booking.snav.it/#{path}"
在所有情况下,您最终都会在requests
中使用最终网址:
res = requests.get(final_url, params=params)