在 python 中动态生成 URL
Generate dynamically URL in python
我想以编程方式生成由这些部分制作的URL
固定部分
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
传递参数
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)
但不知道如何动态构建固定后的第一部分 URL 1040/19-02-2019/1042/19-02-2019
A URL 实际上只是一个字符串,任何常用的字符串操作技术都可以在这里使用。您的组成部分中也没有任何需要 URL-编码的字符,从而使整个过程更简单。
如果您确实有使用不在 list of unreserved characters, then use the 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}"
在所有情况下,您最终都会得到一个最终 URL 用于 requests
:
res = requests.get(final_url, params=params)
我想以编程方式生成由这些部分制作的URL
固定部分
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
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)
但不知道如何动态构建固定后的第一部分 URL 1040/19-02-2019/1042/19-02-2019
A URL 实际上只是一个字符串,任何常用的字符串操作技术都可以在这里使用。您的组成部分中也没有任何需要 URL-编码的字符,从而使整个过程更简单。
如果您确实有使用不在 list of unreserved characters, then use the 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}"
在所有情况下,您最终都会得到一个最终 URL 用于 requests
:
res = requests.get(final_url, params=params)