Liens internet en Python
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Liens internet en Python



  1. #1
    Alban_

    Liens internet en Python


    ------

    Bonjour,

    je cherche à repérer les pdf d'une page à l'aide de Beautiful Soup en Python. Cela marche sans trop de problème, mais une fois que je récupère les liens, je tombe sur un problème : sur certaines pages, par exemple https://openclassrooms.com/fr/old-courses-pdf, je récupère le lien complet, c'est-à-dire http://user.oc-static.com/pdf/5690-3...c-irrlicht.pdf pour le premier pdf. Mais sur d'autres pages, j'obtiens un lien raccourci, où il n'y aurait que par exemple 5690-3d-temps-reel-avec-irrlicht.pdf.

    Comment récupérer la totalité du lien ?

    -----

  2. #2
    PA5CAL

    Re : Liens internet en Python

    Bonjour

    Dans une page, les liens peuvent être donnés de différentes manières :
    • soit par une URL absolue, comme par exemple http://monsite.com/dossier/document.pdf
    • soit par une URL relative, relativement à l'adresse de la page courante ou par rapport à l'adresse de base éventuellement précisée dans un tag <BASE>, comme par exemple :
    - document.pdf ou ./document.pdf (dans le dossier courant)
    - dossier1/document.pdf ou ./dossier1/document.pdf (dans le sous-dossier dossier1 du dossier courant)
    - ../document.pdf (dans le dossier parent du dossier courant)
    - ../dossier2/document.pdf (dans le sous-dossier dossier2 du dossier parent du dossier courant)
    - /document.pdf (dans le dossier racine courant)
    - /dossier3/document.pdf (dans le sous-dossier dossier3 du dossier racine courant)

    Dans le cas où l'URL serait relative, il faudrait reconstituer l'URL en utilisant l'adresse de base spécifiée ou, à défaut, l'adresse de la page courante.

  3. #3
    Alban_

    Re : Liens internet en Python

    Merci de ta réponse.

    Mon problème est évidemment dans le cas d'une URL relative. Si je comprends bien, le tag <BASE> me permettra d'obtenir l'URL absolue à partir de l'URL relative. Mais comme tu marques "éventuellement", je présume que ce tag n'y est pas toujours ? (je testerai sur différentes pages dès que j'ai un peu de temps). Dans ce cas, est-ce qu'il existe une façon de reconstituer l'URL absolue ? Ou alors on fait plusieurs tests en ajoutant devant l'URL relative l'adresse de la page courante (en enlevant éventuellement des caractères). Je demander car ça me parait laborieux : je n'ai plus l'exemple de la page mais j'ai eu une page http://monsite.com/Documents_Files/document.pdf où l'adresse relative renvoyée par Python était Documents/Document.pdf (sans le _Files donc). Dur à deviner et compliqué si on veut automatiser pour que ce soit valide pour tous les sites !

  4. #4
    Ikhar84
    Animateur Informatique

    Re : Liens internet en Python

    1. L'URL commence par http ou ftp: elle est abolue
    2. Sinon elle est relative et donc ajouter l'adresse courant de la page au début... (pour simplifier)...

    Par contre "aspirer" des ressources d'un site web est (au moins) mal vu, il vaut mieux demander une autorisation avant.
    J'ai glissé Chef !

  5. A voir en vidéo sur Futura
  6. #5
    PA5CAL

    Re : Liens internet en Python

    Citation Envoyé par Alban_ Voir le message
    Si je comprends bien, le tag <BASE> me permettra d'obtenir l'URL absolue à partir de l'URL relative. Mais comme tu marques "éventuellement", je présume que ce tag n'y est pas toujours ?
    Il y est même très rarement.

    Toutefois, si l'on regarde le code HTML de cette page, dans l'entête on peut trouver :

    Code HTML:
    <base href="https://forums.futura-sciences.com/" />
    Citation Envoyé par Alban_ Voir le message
    est-ce qu'il existe une façon de reconstituer l'URL absolue ? Ou alors on fait plusieurs tests en ajoutant devant l'URL relative l'adresse de la page courante (en enlevant éventuellement des caractères).
    Il ne suffit pas toujours d'ajouter l'adresse de la page courante et l'adresse relative.

    Déjà, comme déjà indiqué, l'adresse de départ peut être définie par un tag <BASE>.

    De plus :
    - dans le cas où l'adresse du lien commence par « / » (racine) il faut faire disparaître toute référence au chemin dans l'adresse absolue ;
    - dans le cas où l'adresse relative commerce par « // » il faut faire disparaître toute référence au domaine et au chemin dans l'adresse absolue.
    Par exemple, si l'adresse de page courante est https://www.monsite.com/dossier/sous-dossier/document.html, alors en l'absence de tag <BASE> :
    - le lien /dossier2/document2.html aboutit à l'adresse absolue https://www.monsite.com/dossier2/document2.html ;
    - le lien //www.site2.fr/document3.html aboutit à l'adresse absolue https://www.site2.fr/document3.html .

    En fait, d'une manière générale il faut analyser l'URL du lien et l'URL servant de base (adresse de la page courante ou tag <BASE>) afin de reconstituer l'URL complète.

    Selon la présence ou l'absence de champs optionnels, une URL peut s'avérer plus ou moins complexe. Pour rappel, une URL pourrait être de la forme :

    https://compte:motdepasse@www.monsite.com/dossier/sous-dossier/document.php?param1=val1&param2=val2#ancre

    Citation Envoyé par Alban_ Voir le message
    j'ai eu une page http://monsite.com/Documents_Files/document.pdf où l'adresse relative renvoyée par Python était Documents/Document.pdf (sans le _Files donc).
    Documents_Files et Documents sont deux dossiers différents. Il devait probablement y avoir une balise <BASE>. On peut aussi envisager que Javascript ait modifié la requête, ou encore que le serveur ait répondu par une redirection vers un autre lien.
    Dernière modification par PA5CAL ; 04/04/2019 à 23h10.

  7. #6
    Alban_

    Re : Liens internet en Python

    Merci de ces précisions, je vais regarder ce que j'arrive à faire en testant sur différents sites et je reviendrai poser des questions si nécessaire.
    Petite précision, je ne compte pas aspirer des centaines de sites, je veux juste pouvoir récupérer des pdf (légaux et mis à disposition par leurs auteurs) sans devoir le faire un par un (et en plus, m'exercer sur Python !)

Discussions similaires

  1. Liens internet s'ouvrent pas correctement
    Par invite7e528fee dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 28
    Dernier message: 24/02/2013, 11h25
  2. Programme allant de liens en liens sur internet.
    Par Tesla dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 23/06/2003, 15h50