首页 > 解决方案 > 如何从 Python 中的 url 中删除“%20”?

问题描述

在将 %20 符号转换为字符串后,我正在尝试使用 Python(不是 C#、PHP 或其他)从 url 中删除它。但是,无论我尝试什么格式,符号都保持不变。

这是我尝试过的代码:

url = 'https://www.amazon.com/s?k=hbb%20magic%20dress' # Type string

title_text_data_file = url.split('=')[1]
if '%20'in title_text_data_file:
    title_text_data_file = title_text_data_file.replace('%20+', '')
    keyword = title_text_data_file.replace('+', ' ')
    title_text_data_file = title_text_data_file + ".txt"
    print('Keyword:',keyword,'- File title:',title_text_data_file,'- URL:',url)

这是我得到的:

Keyword: hbb%20magic%20dress - File title: hbb%20magic%20dress.txt - URL: https://www.amazon.com/s?k=hbb%20magic%20dress

这是我想得到的:

Keyword: hbb magic dress - File title: hbb+magic+dress.txt - URL: https://www.amazon.com/s?k=hbb%20magic%20dress

标签: pythonstringurlformatting

解决方案


实际上,最好使用旨在处理 url 的库,因为它可以处理任何 urlencoded 字符,而不仅仅是空格 ( %20)。标准库提供urllib.parse模块。

在您的情况下,您想使用

import urllib.parse
url = 'https://www.amazon.com/s?k=hbb%20magic%20dress'
# This extracts the query part from the url
query = urllib.parse.urlparse(url).query
# This gets the first k parameter, decoding any urlencoded character, not only spaces(%20)
keyword = urllib.parse.parse_qs(query)['k'][0]

推荐阅读