我有一個我想用來通過 YouTube 搜索的歌曲串列。但是,當使用某些帶有特殊字符的歌曲時,會彈出以下錯誤:
代碼:
import urllib.request
import re
search_kw = tracks[3]['Artist'] ' ' tracks[3]['Track Title']
search_kw = search_kw.replace(' ',' ')
html = urllib.request.urlopen("https://www.youtube.com/results?search_query=" search_kw)
video_ids = re.findall(r"watch\?v=(\S{11})", html.read().decode())
print("https://www.youtube.com/watch?v=" video_ids[0])
UnicodeEncodeError: 'ascii' 編解碼器無法對位置 43 中的字符 '\xe9' 進行編碼:序號不在范圍內 (128)
導致錯誤的字串示例:
Tutu Au Mic' – dumbéa
如何將特殊字符轉換為常規字符以防止發生錯誤?
uj5u.com熱心網友回復:
為此使用 Unidecode 庫:https ://pypi.org/project/Unidecode/ ,它保證回傳一個 ascii 字串。
uj5u.com熱心網友回復:
對于網路查詢,您可能需要使用 urlencode
urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)
或對于一般字符翻譯,字串 maketrans 方法
Python 3.9.5 (default, Nov 18 2021, 16:00:48)
[GCC 10.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> txt = "Tutu Au Mic' – dumbéa"
>>> mytable = txt.maketrans("é", "e")
>>> print(txt.translate(mytable))
Tutu Au Mic' – dumbea
>>>
uj5u.com熱心網友回復:
您應該對非 ascii 字符進行編碼,而不是這樣做。Youtube 可能能夠理解您使用 ascii 近似值的意思,但并非所有字符都具有 ascii 近似值。而且這不是必需的,有定義明確的方法可以將非 ascii 字符作為 URL 查詢字串的一部分傳入。
標準庫提供urlib.parse.quote_plus轉義文本以用作查詢字串。或者使用優秀的requests庫https://docs.python-requests.org/en/latest/。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404639.html
標籤:
