如何在Python中使用`requests.get()`正确编码URL参数中的特殊字符?

问题描述 投票:0回答:1

我想在 jupyter 笔记本上使用

requests.get()
从网站获取一些内容,Python 版本为 3.10。

该网站是一个简单的搜索引擎,带有搜索栏和一些按钮。

当我输入

apple
时,浏览器会显示以
?search=apple
结尾的 URL。当我输入
α
时,浏览器会显示一个以
?search=%u03B1
结尾的 URL。

我尝试使用以下代码获取内容:

import requests

def search(keyword):
    url = "xxxxxxxxxxx.asp"
    params = { 'search': key }
    headers = { ... }
    res = requests.get(url, params=params, headers=headers)
    return res.content

search('α')

但是,这并没有返回“α”的结果。相反,它返回繁体汉字

的搜索结果。

search("%u03B1")

然后我尝试了这个,但它返回的结果是“%u03B1”而不是“α”。

我该如何解决这个问题?

(我尝试过的)

的内容 的内容 的内容 的内容 的内容 的内容
输入(
params
)
url(我实际得到的) 搜索结果(
res.content
)
α
?search=%CE%B1
包含
β
?search=%CE%B2
包含
γ
?search=%CE%B3
包含
%u03B1
?search=%u03B1
包含
%u03B1
%u03B2
?search=%u03B2
包含
%u03B2
%u03B3
?search=%u03B3
包含
%u03B3
... ... ...

(我期望的样子)

的内容 的内容 的内容
输入(使用网站的搜索栏) url(我在浏览器上看到的) 搜索结果(浏览器)
α
?search=%u03B1
包含
α
β
?search=%u03B2
包含
β
γ
?search=%u03B3
包含
γ
... ... ...
python encoding character-encoding encode
1个回答
0
投票

您可能需要使用

ord()
手动构建 URL。
ord()
返回字符的 Unicode 代码点。

例如,

def search(keyword): 
    url = "<your_url>" 
    encoded_keyword = '%u{:04X}'.format(ord(keyword)) 
    params = {'search': encoded_keyword} 
    headers = <your_headers> 
    res = requests.get(url, params=params, headers=headers) 
    print(res.url) # %25u03B1 
    return res.content 

print(search('α')) 

希望这会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.