Y a-t-il des outils pour faire une URL comparer à Python? p>
Par exemple, si j'ai Si je devais construire une règle manuellement, je pourrais la majuscule, puis éteindre la portion de Y a-t-il une bibliothèque qui fait cela? Comment le feriez-vous? P> http://google.com code> et
Google.com / code> J'aimerais savoir qu'ils sont susceptibles d'être le même site . P>
http: // Code> et déposez quelque chose après le dernier caractère alphanumérique .. mais je peux voir Échec de cette situation, comme je suis sûr que vous pouvez aussi bien. P>
4 Réponses :
Ce n'est pas "flou", il vient de trouver la "distance" entre deux cordes: p>
Ceci en haut de ma tête:
def canonical_url(u): u = u.lower() if u.startswith("http://"): u = u[7:] if u.startswith("www."): u = u[4:] if u.endswith("/"): u = u[:-1] return u def same_urls(u1, u2): return canonical_url(u1) == canonical_url(u2)
C'est semblable à ce que je construirais si j'allais le faire manuellement. J'espérais qu'il y avait une libère qui le fait déjà. Il semble que cela devrait être un problème résolu.
@Colin: C'est l'une de ces choses où le faire vous-même est généralement assez facile et plus susceptible de vous obtenir ce que vous voulez vraiment. La chose est qu'il n'y a pas de «forme canonique» strictement définie d'une URL, alors tous ceux qui le souhaitent de penser quelque chose de légèrement différent.
Je suis d'accord avec Nicholas: Ce n'est pas assez bien défini pour avoir obtenu une définition standard. Vous serez mieux servi en l'écrivant vous-même.
Basse-coiffée L'URL entière me frappe comme une mauvaise idée - un cas importe l'URL (à part l'hôte et le domaine)
Vous pouvez rechercher les noms à l'aide de DNS et voyez s'ils pointent sur la même adresse IP. Un certain traitement de chaîne mineure peut être nécessaire pour éliminer les caractères déroutants. Résultat: P> url: http://google.com
dns lookup: google.com
ip: 66.102.11.104
url: google.com/
dns lookup: google.com
ip: 66.102.11.104
url: www.google.com/
dns lookup: www.google.com
ip: 66.102.11.104
url: news.google.com
dns lookup: news.google.com
ip: 66.102.11.104
[('66.102.11.104', 'http://google.com'), ('66.102.11.104', 'google.com/'), ('66.102.11.104', 'www.google.com/'), ('66.102.11.104', 'news.google.com')]
Il y a Un peu pour créer une URL canonique apparemment. Le URL-Normaliser la bibliothèque est le mieux que j'ai testé.
Selon la source de vos URL, vous souhaiterez peut-être les nettoyer d'autres paramètres standard tels que Codes UTM . W3LIB.URL.URL_QUERY_CLEANER est utile pour cela. P>
combinant ceci avec La réponse de Batchelder NED pourrait ressembler à quelque chose comme: p>
CODE: STRT> P>
['google.com', 'google.com', 'google.com', 'google.com', 'google.com', 'google.com', 'google.com', 'google.com']
Cela ne vous laissera pas poster deux liens i> sans la réputation de X, mais vous pouvez inclure autant d'URL que vous le souhaitez si vous les mettez en panneaux de retour afin que l'analyseur ne les converse pas en liens. J'ai édité votre question pour montrer ce que je pense que vous pensez, mais si je me suis trompé, veuillez le modifier pour me corriger.
Oh, et une autre chose: qu'entendez-vous exactement par la comparaison "floue"? Il est facile de dire que
http://google.com code> et
google.com / code> sont la même chose car ils ont exactement la même forme canonique, mais ce n'est pas une comparaison floue. Une vraie comparaison floue identifierait les URL similaires, mais non identiques, même après que vous les converties sur une forme standard.
Merci encore très neuf pour. J'ai changé le titre.
Intertwning.net/stories/2004/08/04/URLNORM.PYLED > On dirait que cela pourrait être un bon point de départ.