12
votes

JavaScript: Regex pour changer toutes les URL relatives en absolu

Je crée actuellement un nœud.js Webscraper / proxy, mais j'ai du mal à analyser des URL relatives trouvées dans la partie de script de la source, j'ai pensé que la regex ferait le tour. Bien que cela soit inconnu, comment j'y réaliserais.

Y a-t-il de toute façon je peux y aller?

Aussi, je suis ouvert à un moyen plus facile de le faire, car je suis assez déflumer sur la manière dont les autres proxy analysent les sites Web. Je pensais que la plupart ne sont que des racleurs de site glorifiés qui peuvent lire la source d'un site un relais de relais tous les liens / formulaires à la proxy.


1 commentaires

J'utiliserais un véritable analyseur, pas une regex. Il existe des analyseurs HTML pour le nœud.


5 Réponses :


-1
votes

Si vous utilisez une regex pour trouver toutes les URL non absolues, vous pouvez ensuite les préfixer avec l'URL actuelle et cela devrait être.

Les URL dont vous avez besoin pour réparer seraient celles qui ne démarrent pas non plus avec un / ou http (s): // (ou d'autres marqueurs de protocole, si vous vous souciez d'eux)

Par exemple, disons que vous grattez http://www.example.com/ . Si vous rencontrez une URL relative, disons FOO / BAR , vous préfixeriez simplement l'URL étant raclée à elle comme: http://www.example.com/foo/bar < / code>

Pour une regex pour gratter les URL de la page, il y a probablement beaucoup de bonnes values ​​disponibles si vous Google un peu donc je ne vais pas commencer à inventer un pauvre ici :)


1 commentaires

@ Rob-w Si URL de base comme " exemple.org/user/Account " (dernier / dans href) alors il ne sera pas converti en absolu. Ex.: Modifier C'est donner: .org / utilisateur / edit.html Il devrait être exemple.org/user /account/edit.html



44
votes

Fonctions de remplacement de chaîne HTML avancées

Remarque pour OP, car il a demandé une telle fonction: Changer base_url à l'URL de base de votre proxy afin d'atteindre les résultats souhaités.

Deux fonctions seront affichées ci-dessous (le guide d'utilisation est contenu dans le code). Assurez-vous de ne sauter aucune partie de l'explication de cette réponse pour bien comprendre le comportement de la fonction.

  • rel_to_abs (URL) - cette fonction renvoie des URL absolues. Lorsqu'une URL absolue avec un protocole couramment approuvé est passée, elle renvoie immédiatement cette URL. Sinon, une URL absolue est générée à partir du base_url et de l'argument de la fonction. Les URL relatives sont correctement analysées ( ../ ; ./ ; . ; // / code>).
  • remplaforme_all_rel_by_abs - cette fonction va analyser Toutes les événements d'URL ayant une signification significative dans HTML, telle que CSS URL () , liens et des ressources externes. Voir le code pour une liste complète des instances analysées. Voir Cette réponse pour une implémentation ajustée sur Sanitize Strings HTML à partir d'une source externe (à incorporer dans le document).
  • Cas de test (au bas de la réponse): Pour tester l'efficacité de la fonction, il suffit de coller le bookmarklet à la barre de l'emplacement.


    rel_to_abs - d'analyse des URL relatives xxx

    Cas / exemples:

    • http://foo.bar . Déjà une URL absolue, ainsi retournée immédiatement.
    • / doo relatif à la racine: retourne la racine actuelle + fournie une URL relative.
    • ./ meh relatif au répertoire actuel.
    • ../ booh par rapport au répertoire parent.

      La fonction convertit les chemins relatifs sur ../ et effectue un recherche-and-remplacer ( http: // domaine / sous / autre-tout-but-a- SLASH /../ ME TO HTTP: // Domaine / SUB / ME ).


      Remplacer_All_Rel_By_abs - convertir toutes les occurrences pertinentes des URL URL à l'intérieur des instances de script (