¿Cómo resolver el problema de codificación de URL en Python?
Recientemente, al obtener algunos datos dinámicos generados por el código js, necesitaba simular solicitudes js para obtener los datos requeridos y encontré el problema de codificar y decodificar la URL, así que resolví el problema. deja más claro lo que has aprendido. Para codificar y decodificar URL, Python proporciona una interfaz de llamada muy conveniente.
Cuando la URL de la consulta contiene caracteres especiales (caracteres no reservados de URL), es necesario codificarla. Cuando hay caracteres chinos en la URL, se requiere un procesamiento especial para codificarlos correctamente. Lo siguiente es solo para este caso y, por supuesto, también se aplica a los caracteres exclusivamente en inglés en la URL.
(1) codificación de URL:
importar urllib
url = 'wd=jaja' ?
url = 'wd=jaja ' ? # Si el sitio web utiliza codificación gbk, debe decodificarse de gbk a unicode y luego decodificarse de Unicode a utf-8.
url = url.decode('gbk', 'reemplazar')
imprimir urllib.quote(url.encode('utf-8', 'reemplazar')) p>
Resultado: 3a%2f%2ftest.com%2fs%3fwd% 3d%e5%93%3fwd 3d%e5%93%88%e5%93%88
(2) URL Decodificación:
Importar urllib
encoded_url = est.com%2fs%3fwd%3d%e5%93%88%e5%93%88'
imprimir urllib .unquote(encoded_url).decode('utf-8', 'replace').encode('gbk', 'replace') ?#Reverse
Los parámetros y resultados de la llamada a la función son todos en codificación utf-8, por lo que al codificar la URL, debe convertir la codificación de la cadena de parámetros de la codificación original a utf-8.
Al decodificar la URL, debe convertir el resultado decodificado de utf-8 Convertir al formato de codificación original.
Según la codificación utilizada por el sitio web, ya sea gbk o utf-8, se asignan diferentes codificaciones para diferentes transcodificaciones de URL. En formato gbk, un carácter chino se convierte en dos grupos de %xx%xx%xx y ***. en formato utf-8, un carácter chino se convierte en tres grupos de %xx%xx%xx y ***.
>>>?import?sys,urllib?
?
>>?s?=?' Hangzhou'?
>>>?urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
?
%BA%BC%D6%DD ?
>>>?urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
?
' %E6%9D%AD%E5%B7%9E'?
[python]?¿Niña mexicana fue secuestrada 40.000 veces en 4 años? ¿Dar a luz a un niño y convertirse en rehén - Sohu News"?
print?urllib.quote(urllib.quote(a))?
Después de dos conversiones de codificación, se convertirá en : %25E5%25A2%25A8%25E8%25A5%25BF%25E5%2593%25A5%25E5%25A5%25B3%25E5%25AD%25A9%25E8%25A2%25AB%25E6%258B%25904% 25E5%25B9... ................................................. ................ ........................ Qué mesa
Y es necesario decodificarlo dos veces para obtener chino.
p>Recientemente, escribí un pequeño rastreador en Python para descargar algo automáticamente, pero la URL está en chino y el chino parece estar codificado con. gbk primero y luego lo convierto a la URL. Por ejemplo, si tengo un carácter Unicode. Cadena "historia de esas vacas.pdf", entonces convierto la URL a:?
t="%20. %E5%8E%86%E5%8F%B2%E4%B8%8A% E9%82%A3%E4%BA%9B%E7%89%9B%E4%BA%BA%E4%BB%AC.pdf ",?
Pero el s= dado por otro sitio web "%C0%FA%CA%B7%C9%CF%C4%C7%D0%A9%C5%A3%C8%CB%C3% C7.PDF"
>>>print urllib.unquote ("%C0%FA%CA%B7%C9% CF%C4%C7%D0%A9%C5%A3%C8%CB%C3 %C7.PDF").decode('gbk').encode('utf -8')
>>>Esas vacas en la historia.PDF