Estoy trabajando en una aplicación que necesita analizar URL (principalmente URL de HTTP) en páginas HTML. No tengo control sobre la entrada y parte de ella es, como era de esperar, un poco desordenado.Análisis de URL en Python: normalización de doble barra en las rutas
Un problema que estoy encontrando con frecuencia es que urlparse es muy estricto cuando se trata de análisis y de empalme URL que tienen dobles barras en la parte de la ruta, por ejemplo (y posiblemente incluso buggy?):
testUrl = 'http://www.example.com//path?foo=bar'
urlparse.urljoin(testUrl,
urlparse.urlparse(testUrl).path)
En lugar del resultado esperado http://www.example.com//path
(o mejor aún, con una barra única normalizada), termino con http://path
.
Por cierto, la razón por la que estoy ejecutando dicho código es porque es la única forma que he encontrado hasta ahora de quitar la parte de consulta/fragmento de las URL. Tal vez hay una mejor manera de hacerlo, pero no pude encontrar uno.
¿Alguien puede recomendar una forma de evitar esto, o debería simplemente normalizar el camino usando una expresión regular (lo sé)?
¿Qué quiere decir con "es la única manera de despojar a la parte de consulta/fragmento"? ¿Qué tiene que ver la barra oblicua con la consulta? – jknupp
No tiene nada que ver con la consulta, la razón por la que estoy analizando una URL y luego uniéndome a su propia ruta es porque quiero quitar la consulta y el fragmento. Si hubiera una mejor manera de hacerlo, no necesitaría resolver este problema. – shevron
Creo que urlparse está implementando el RFC de URLs correctamente, eso especifica que después de la parte: parece ser una sola barra (http: //tools.ietf.org/html/rfc1738) - así que en tu caso trataría de quitar la barra adicional antes de pasarla a urlparse. –
BergmannF