2009-09-17 7 views
0

Est-ce que quelqu'un connaît une bibliothèque pour la réparation d'URL "cassées"? Lorsque je tente d'ouvrir une URL telle queCorrection d'URL brisées

http://www.domain.com/../page.html 
http://www.domain.com//page.html 
http://www.domain.com/page.html#stuff 

selfs urllib2.urlopen et me donne un retraçage HTTPError. Est-ce que quelqu'un sait d'une bibliothèque qui peut réparer ce genre de choses?

+1

Le dernier est parfaitement valide n'est ce pas? – SeanJA

+0

Pourquoi ne pas faire un scan des urls (sur un site web je suppose) et ensuite avec les urls trouvées ne pourriez-vous pas utiliser regex pour remplacer les mauvais ou au pire les remplacer à la main? – SeanJA

+1

@SeanJA: le dernier est valide pour un * navigateur *, mais le navigateur supprimera la partie «# stuff» avant de l'envoyer au serveur. Un serveur est susceptible de rejeter une URL avec '# stuff' à la fin, ce qui explique pourquoi l'OP a trouvé une erreur avec' urlopen'. Ces affixes doivent être supprimés avant de demander un serveur à propos de cette URL. –

Répondre

2

Qu'en est quelque chose comme ...:

import re 
import urlparse 

urls = ''' 
http://www.domain.com/../page.html 
http://www.domain.com//page.html 
http://www.domain.com/page.html#stuff 
'''.split() 

def main(): 
    for u in urls: 
    pieces = list(urlparse.urlparse(u)) 
    pieces[2] = re.sub(r'^[./]*', '/', pieces[2]) 
    pieces[-1] = '' 
    print urlparse.urlunparse(pieces) 

main() 

n'émet, comme vous le souhaitez:

http://www.domain.com/page.html 
http://www.domain.com/page.html 
http://www.domain.com/page.html 

et qui semblent à peu près correspondre à vos besoins, si je les comprends bien.

+0

http://www.domain.com/ohmygod///page.html http://www.domain.com/nono/...page.html ne fonctionne pas –

+1

À droite, je ne fais que réparer les casse à le début du chemin, selon les seuls exemples donnés par le PO. Vous pouvez corriger un peu plus de casse en 'path.split ('/')', en ignorant les pièces vides et en supprimant les points principaux parasites. Mais il y a une infinité d'URLs cassées possibles d'ordre supérieur, à moins que QUELQUES spécifications soient données, il est impossible de savoir quoi réparer! -) –