在 Steam 中传递非 ASCII 字符 url

Passing a non ascii character in steam url

我正在尝试获取商品的价格 StatTrak™ Dual Berettas | Panther (Factory New)。然而 TM 引起了问题,因为 urllib 将其视为非 ascii 字符。我发现了这个 How to fetch a non-ascii url with urlopen? 但无论出于何种原因,Steam 都出现了 500 错误

from urllib.parse import quote 

def get_price(item_name):
    base_url = 'http://steamcommunity.com/market/priceoverview/?appid=730&currency=1&market_hash_name={}'
    print(base_url.format(quote(item_name)))
    request = urllib.request.urlopen(base_url.format(quote(item_name)))

输出URL(解析后):http://steamcommunity.com/market/priceoverview/?appid=730&currency=1&market_hash_name=StatTrak%E2%84%A2%2520Dual%2520Berettas%2520%7C%2520Panther%2520%28Factory%2520New%29

正在工作 url(在浏览器中完成):https://steamcommunity.com/market/priceoverview/?appid=730&currency=1&market_hash_name=StatTrak%E2%84%A2%20Dual%20Berettas%20|%20Panther%20(Factory%20New)

我似乎需要通过这个,但是 urllib 不允许我通过。我能做什么?

您的代码似乎工作正常:

>>> base_url = 'http://steamcommunity.com/market/priceoverview/?appid=730&currency=1&market_hash_name={}'
>>> urllib.request.urlopen(base_url.format(quote("StatTrak™ Dual Berettas | Panther (Factory New)"))).read()
b'{"success":true,"lowest_price":".80","volume":"3","median_price":".53"}'

我认为您的问题是由于双引号引起的。 “输出 URL”中的 %2520 表示您引用了一个 space (%20) 两次 (' ' -> %20 -> %2520).

但是您的代码似乎只引用了一次,这很好。您必须将已引用的项目传递给函数。