Stack Overflow en español Asked on November 10, 2021
estoy programando un bot para discord, y en un comando en específico se encarga de hacer scraping de acuerdo a la palabra que el usuario introduce junto con el comando !rankr (por ejemplo: !rankr jugador1). Hasta ahora todo funciona bien, el problema comienza cuando el usuario busca una palabra con un caracter especial como "Ø" por ejemplo. Cuando eso pasa, inmediatamente me lanza error de encoding porque el codigo ascii no puede interpretar dicho símbolo. Cómo puedo hacer para que mi comando interprete dichos símbolos y haga la busqueda correspondiente?
Éste es mi código actual:
@bot.command(name="rankr")
async def rankr(ctx, arg):
#Diccionaro de simbologías:
o = u'xd8'
html = urlopen('http://maplestory.nexon.net/rankings/world-ranking/reboot-(na)?pageIndex=1&character_name=' + arg)
url = "http://maplestory.nexon.net/rankings/world-ranking/reboot-(na)?pageIndex=1&character_name=" + arg
legionurl = "http://maplestory.nexon.net/rankings/legion/reboot-(na)?pageIndex=1&character_name=" + arg + "&search=true®ion=#ranking"
Donde "arg" es la palabra escrita por el cliente junto con el comando.
Edit: Al hacer estos cambios me lanza otro error donde dice que el objeto de tipo ‘int’ no tiene len():
html = urlopen('http://maplestory.nexon.net/rankings/world-ranking/reboot-(na)?pageIndex=1&character_name=' + quote(entrada))
url = "http://maplestory.nexon.net/rankings/world-ranking/reboot-(na)?pageIndex=1&character_name=" + quote(entrada)
legionurl = "http://maplestory.nexon.net/rankings/legion/reboot-(na)?pageIndex=1&character_name=" + quote(entrada) + "&search=true®ion=#ranking"
Gracias de antemano!
Al fin pude descifrar como hacerlo. Básicamente tuve que transformar a bytes la variable arg:
arg = bytes(arg,'utf-8')
y después cuando quiera usarla para un request, especificar que tiene que hacer un decode a 'utf-8':
url = "http://maplestory.nexon.net/rankings/world-ranking/reboot-(na)?pageIndex=1&character_name=" + arg.decode('utf-8')
De esta manera es que logré hacerlo, desconozco si sea la mejor forma pero en definitiva me funcionó.
Answered by Alan Carlos Lopez on November 10, 2021
Las urls que recibe urlopen deben ser convertibles a la codificación ASCII. Como "Ø" es un símbolo que no puede ser representado en esa codificación, urlopen tira una excepción UnicodeEncodeError al intentar convertirlo.
Para solucionarlo deberías escapar los símbolos conflictivos con urllib.parse.quote. Por ejemplo:
from urllib.parse import quote
from urllib.request import urlopen
entrada = "Ø"
response = urlopen("https://httpbin.org/get?q=" + quote(entrada))
print(response.getcode())
Answered by braver on November 10, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP