Parser une page web en utilisant php

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par badboy lam, 25 Décembre 2009.

  1. badboy lam
    badboy lam Nouveau WRInaute
    Inscrit:
    23 Décembre 2009
    Messages:
    14
    J'aime reçus:
    0
    Bonjour ,
    Je veux parser une page web , en utilisant php , j'ai pas compris comment coder un parseur , qui peut m'aider ? SVP
     
  2. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 270
    J'aime reçus:
    0
    à partir de php4 http://php.net/manual/fr/ref.domxml.php
     
  3. badboy lam
    badboy lam Nouveau WRInaute
    Inscrit:
    23 Décembre 2009
    Messages:
    14
    J'aime reçus:
    0
    ces fonctions , sont des fonctions XML , ça peut marché ac du html ?
     
  4. -amethyste-
    -amethyste- Nouveau WRInaute
    Inscrit:
    26 Février 2008
    Messages:
    45
    J'aime reçus:
    0
    Tu dois utiliser file_get_contents pour récupérer le code source de la page html. Ensuite tu devras t'amuser avec les regex :D
     
  5. anemone-clown
    anemone-clown WRInaute passionné
    Inscrit:
    11 Novembre 2007
    Messages:
    1 577
    J'aime reçus:
    20
    Bonjour,

    a priori, le niveau en programmation n'est pas au top ;-) Utilise effectivement les expressions régulières pour analyser ton texte mais si tu poses la question XML vs. HTML, c'est pas gagné... :-D Il y a plein de sites qui donnent plein de conseils en programmation, une recherche devrait te donner des solutions à ton souci, mais là, ta question est trop peu précise : c'est un peu comme si tu demandais "qu'est-ce qu'il faut que je fasse pour faire à manger?" C'est trop vague.

    Précise ton idée.
     
  6. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    il veut pomper la base de données de son concurrents qui a 150.000 pages indexées !!! :)
     
  7. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    Salut,

    J'essaie de parser une page ayant une extension .aspx mais je n'y arrive pas ! Cette page est accessible via un login et mot de passe. J'ai déjà parsé d'autres page avec un bout de code php du style :

    Sur la homepage du site à parser j'arrive à voir leur page lorsque je fais un echo "$url_fp" mais lorsque je me loggue sur une autre page de leur site (avec mon login + mon mot de passe) ça ne marche plus, lorsque je fais un echo "$url_fp" de cette page il ne s'affiche rien ! C'est comme s'ils avaient bloquer cette fonction de parser. Quelqu'un peut-il m'aider à y comprendre quelque chose je ne connais pas du tout l'asp comme language de programmation ?

    D'avance merci pour votre aide.
     
  8. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Que ce soit de l'asp n'y change rien, c'est le HTML généré que tu parses, non le codes avant interprétation du serveur. Et amha, si tu te retrouves avec une page blanche, c'est qu'il y a fort à parier que le site en face n'apprécie pas des masses que tu récupères son contenu ainsi.
     
  9. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    Merci pour ta réponse.

    Ca veux dire qu'ils ont mis quelque chose dans leur code qui empêche de parser, c'est ça ?

    Si je post ici le code asp de leur page, penses-tu pouvoir trouver ce qui empêche de parser ?
     
  10. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    comment penses tu pouvoir avoir le code asp de leur page ? je pense que tu devrais sérieusement (re)voir les règles de bases client/serveur
     
  11. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Si ils ont mis en place un système qui bloque le parsage de leurs pages, c'est qu'ils ne veulent pas que tu parses leur page j'imagine. Sinon, le plus simple serait de leur demander, non ?

    A mon avis c'est sans doute au niveau du serveur que le nécessaire est fait pour ne pas que tu puisses parser le contenu sécurisé.
     
  12. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    Ok je me suis mal exprimé, je pensais plutôt poster le code html de leur page en espérant pouvoir trouver dans leur code le hic qui bloque le parsage.

    Je leur ai demandé à 3 reprises mais pas de réponse, ils font le mort :(

    Le problème c'est que cette société qui propose cet abonnement est en situation de monopole mondial dans mon domaine d'activité et qu'ils ont sur leur site web des infos qu'ils n'exploitent pas (volontairement ou involontairement) mais que moi je trouve très pertinentes pour mes internautes (et futurs consommateurs), donc en gros : vous pouvez accéder à mon abonnement payant (je veux bien votre fric) mais je restreint l'accès à mon site afin que je puisse contrôler l'information qui en sortira, trouvez-vous cela très concurrentielle, très en adéquation avec le libre échange, c'est pas très cool, non ?
     
  13. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    tu vas pas te faire que des amis ici toi ...
     
  14. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    ben quoi, tu défends donc les positions de monopole, c'est ça ?

    Je ne vais pas t'expliquer la raison exacte que j'ai à faire cela mais crois moi cette raison est bien fondée et justifiée !

    Dans les positions de monopole total il y a toujours des abus, es-tu d'accord avec ça ?
     
  15. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 270
    J'aime reçus:
    0
    c'est pourtant du libre échange : tu échanges de l'argent contre du contenu, et tu es libre ou non de le faire :mrgreen:
     
  16. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    :lol:
     
  17. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 950
    J'aime reçus:
    275
    Tu mélanges un peu tout. Mais à la base, le principe de la société, c'est "on ne se fait pas justice soi même, on respecte la loi et si elle ne convient pas on la fait changer". Et quand ça n'est pas respecté, figures toi que c'est là que les petits se font le plus écraser...
     
  18. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    c'est très humain de juger autrui sans avoir les tenants et aboutissants d'une situation mais bon je ne vais pas vous jeter la pierre, on est tous pareil !

    C'est une belle leçon de solidarité et d'entraide, merci à tous d'avoir pris plus de temps à me juger, que de temps à trouver une solution à mon problème technique !
     
  19. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 270
    J'aime reçus:
    0
    il me semble que UsagiYojimbo t'a répondu
     
  20. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    De notre point de vue il ne s'agit pas tant d'un problème technique que d'un problème légal : tu n'es pas censé récupérer ainsi ce contenu.

    Même si il était techniquement possible de passer outre les limites mises en place par le développeur du site (ce qui reste à vérifier), WRI n'est pas le genre du forum où on t'expliqueras comment contourner les barrières que tout webmaster est en droit de mettre en place sur son site.

    Le net n'est pas un espace de non-droit où tout ce qui est accessible doit pouvoir être pillé pour une utilisation qui n'a pas été autorisée par son créateur.
     
  21. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    le contenu que je cherche à récupérer automatiquement sur leur site est accessible sur leur site par tous les membres (il n'y a donc rien d'illégal à récupérer cette info !), je pourrais faire cette opération de mise à jour manuellement en TOUTE légalité chaque mois, mais le problème c'est qu'il existe plus de 10 000 catégories de produits, donc imaginez un peu le temps que ça me prendrait manuellement, c'est donc pas un problème d'illégalité mais c'est plus un soucis de récupérer automatiquement (via des requêtes et des regex pour traiter dans leur code html l'info qui m'intéresse) cette info qui est accessible par tous les membres qui se connectent sur leur site !
     
  22. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 270
    J'aime reçus:
    0
    à récupérer cette info pour ses besoins perso, non ? pour republier ailleurs, si.
    A toi de voir si tu veux passer de l'autre côté de la ligne blanche :wink:
     
  23. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    je ne divulgue pas cette info, elle me sert uniqement pour mes calculs de statistiques !
     
  24. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Je pense que ce que ce site n'aime pas, c'est la récupération automatique de leurs contenus. C'est un peu logique, si c'est leur fond de commerce, il ne vont pas le laisser sortir et être réutilisé aussi facilement que ça.
     
  25. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 950
    J'aime reçus:
    275
    Mais il y a une énorme différence entre avoir une info accessible sur un site, et pouvoir la traiter chez soi.
    Scoop : la constitution de l'information, sa mise à jour, son maintien, son classement, etc... ont un cout. Et ce cout, c'est, décidé par le propriétaire de cette info, qui doit en supporter le cout c'est
    ou bien tu es membre et tu peux consulter (éventuellement en payant un peu) et tu "payes" en travaillant à la main
    ou bien tu payes pour avoir cette info

    Autrement dit, et comme je l'avais dit un jour, y'a rien de gratuit en ce bas monde, et le temps c'est de l'argent.

    Le deuxième problème derrière, c'est "comment peuvent ils être sûrs que tu ne vas pas refiler l'info à quelqu'un d'autre ? " et donc diffuser gratuitement leurs données qu'ils veulent eux vendre ? Le fait que tu les affiche directement, ou que tu en fasse un traitement automatisé pour procurer un avantage à tes visiteurs et donc à booster ton site n'est pas ce qui compte le plus.

    Ce qui est important, c'est que, quelle que soit la raison, tu veux utiliser des données que tu cherches à obtenir frauduleusement, c'est à dire contre la volonté de leur "propriétaire auteur".
     
  26. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    Faux : puisque je peux obtenir ces infos de façon manuelles et légales en me connectant sur leur site, ils NOUS fournissent ces infos sur leur site. Ce qui est chiant c'est leurs récupérations : manuellement c'est possible en faisant des copier-coller ; automatiquement ça bloque à cause du code qu'ils ont mis et qui bloque le parsage. Je ne cherche pas à faire quelque chose d'illégal mais juste à automatiser la façon de récupérer ces infos qui sont accessibles par tous les membres de ce site. Je ne cherche pas non plus à revendre ces infos, elles me servent juste à mon propre usage, c'est tout !
     
  27. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Justement, c'est bien là la différence : tu es habilité, via ton paiement, à avoir accès à ces données mais pas à en automatiser la récupération. Pouvoir lire une page de contenu sur un site ne veux pas dire que tu peux en faire ce que tu en veux.

    Que tu veuilles ou non les utiliser de manière personnelle leur importe peu, je pense qu'ils préfèrent se prémunir de toute récupération automatisée (ce qui est bien compréhensible).
     
  28. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    Effectivement si tu es abonné au site lemonde.fr et que tu paies pour lire des articles sur leur site et que tu mettes en place un système automatique qui récupére ces articles de presses pour les mettre sur ton site, c'est pas légale du tout ! Mais dans mon cas, et je le répète, cet abonement est unique au monde, il est indispensable au bon déroulement de notre activité, ils ont un réel monopole ! Je tiens à préciser que je suis dans un domaine d'activité bien particulier qui représente des enjeux économiques qui se chiffrent en milliards d'euros, à ma connaissance il n'y a AUCUN autre secteur d'activité qui se trouve dans le même cas de figure que nous.

    Juste une dernière précision, aujourd'hui je récupère automatiquement sur leur ancien site ces infos et je fais cela depuis plusieurs années, si cela était illégal ils m'auraient dèjà supprimé mon abonnement et l'accès à leur site, non ? Je cherche à faire la même chose mais sur leur nouveau site, ni plus, ni moins !
     
  29. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 270
    J'aime reçus:
    0
    peut-être que leur ancien site n'était techniquement pas dans la possibilité de filtrer ce type de pratique et qu'ils ont profité du développement du nouveau site pour bloquer toute tentative
     
  30. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 950
    J'aime reçus:
    275
    Le fait même que le système ait été mis en place prouve qu'ils ne VEULENT pas que ces informations soient récupérées automatiquement, et cela quel que soit l'usage que tu comptes en faire.

    Le fait que cet abonnement soit unique au monde ne change rien au principe. Et si le secteur en question représente autant d'argent, il doit être possible de financer l'achat de ces données.
     
  31. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    j'ai piqué la ferrari de mon voisin mais c'est légal parcequ'il n'y a que lui qui en a une dans ma ville :mrgreen:
     
  32. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    les chinois du fbi ???
     
  33. bee_human
    bee_human WRInaute passionné
    Inscrit:
    16 Juin 2005
    Messages:
    1 696
    J'aime reçus:
    0
    Dans ce cas de figure:

    1. Regarder clairement les conditions d'utilisations du site permises par ton abonnement
    2. Les contacter pour demander le service complémentaire d'un fichier exporté des données dont tu as besoin

    Ils sont nécessairement contactables.
     
  34. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    342
    J'aime reçus:
    0
    Si telle était la raison, alors c'est complètement stupide puisque je peux récupérer ces infos manuellement et légalement sur leur nouveau site. C'est qu'une question de méthode de récupération (automatique ou manuelle), je ne vois pas en quoi ça les dérangent ! La récupération de ces infos est périodique : tous les 15 jours ou tous les mois.

    J'en suis à 3 emails sans réponses de leur part :(
     
  35. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Bonjour, et désolé de ressortir un topic vieux d'un an, mais je vais en avoir besoin :p.
    Mon problème est le suivant, je dois parser des pages html de type http://blablabla.php?id=** .

    Donc ma mission est de bouclé sur ses pages et de faire un parse classique.
    Voici mon code qui fonctionne :

    Code:
    <?php
    ini_set("max_execution_time", 0);
    require_once 'simple_html_dom.php';
    $id = 1;
    $html = new simple_html_dom();
    while($id < 500)
    {
    $html->load_file("http://www.arretsurimages.net/vite.php?id=$id");
    $html->find('div[class=bloc-vite-gratuit-2]',0);
    $html->find('a[class=typo-vite-titre]',0);
    $link = $html->find('a[class=typo-vite-titre]',0);
    if ($link != "")
    {
       echo($link);
       echo '<br/>';
    }
    $id++;
    }
    ?>
    
    Ce code fonctionne mais pour 500 pages il me faut 5 minutes ! Ce qui est juste beaucoup trop long.
    Alors je me demandais cette fonction la
    Code:
    $html->load_file("http://www.arretsurimages.net/vite.php?id=$id");
    Elle charge tout le contenu de la page si j'ai bien compris ?
    SI oui n'y à t'il pas moyen de ne récupérer que du texte, le vidéos photos ne m'étant d'aucune utilité.

    Si vous avez d'autres idées pour accélérer le processus je suis preneur.
    Ps : le site est un exemple dans mon code, et le site que je parserais est une base de donnée publique donc autorisé. :)

    Merci de votre aide
     
  36. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    Accélérer le code? T'es conscient que tu fais un crawler là? (enfin si j'ai bien compris...)

    Pour faire 500 pages le mieux, à mes yeux, c'est optimiser le telechargement des pages donc oublis php, et commences a faire un langage du style python qui permet de faire du multi-threading ;)
     
  37. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    J'adore ce forum pour les réponses rapide comme ça :p
    En fait j'aurais bien utilisé un autre langage mais je suis contraint d'utiliser le php par mon employeur ...
    En tous il y à 2752 pages à parse pour récupérer à peine 20 caractère par page et les ajouter dans une base mysql.

    Je devrais effectuer ce parse une fois par mois pour d'éventuelle mise à jour de donnée.
    Au pire 10 m de parse la nuit une fois par mois sur le serveur ça devrait passer :).

    Enfin je sais pas ...

    Enfin la j'ai mis 5 m car il y à des vidéos, images ect.. Sur le site en question les pages sont juste composé d'un seul tableau, je devrais faire un test.
     
  38. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    Je ne connais pas ton objet simple_html_dom() mais à priori les videos ou autres ne devraient pas etre downloadées. Tout ce qui est downloadé normalement c'est le contenu des pages. Si tu download autre chose que les pages c'est que ton crawler est mal fait et tu devrais voir à ajouter des restrictions sur les extensions ou sur les repertoires ou noms de fichiers.

    Après 5 minutes ca ne m'etonne pas plus que ca. Tu as le temps de résolution dns, le temps de calcul, le temps de telechargement, le temps de calcul du parseur, et le tout n'est pas multi-threadé. Avec du multi-threading tu pourrais balancer plusieurs threads crawlers en meme temps pour optimiser. Si ton employeur te donne une contrainte au niveau du language de programmation, faut pas qu'il vienne chialer. On grave pas un cd avec un cure dent, on creuse pas une piscine avec une cuillere, etc!! Chaque outil a ses qualités et ses défauts, et php n'est pas fait pour ce genre de choses, il le fera c'est sur, mais faut pas attendre un miracle!
     
  39. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    Check combien de temps prends chaque etape de ton crawl deja pour savoir où ca coince ;)
     
  40. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    D'accord je vais tenter de check ca, mais comment ? via google chrome en regardant la timeline ? :D
     
  41. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    bin en php tu recup le timestamp en micro secondes à chaque étape et tu compares. Tu verras les etapes qui te prennent le plus de temps et tu sauras quoi optimiser. Si c'est le temps de chargement à optimiser t'es mort, la seule solution c'est de passer en multithreads.

    Ou sinon aussi tu peux virer la partie calculs/parser de ton prog, comme ca il te restera plus que les temps de chargement et tu sauras si c'est vraiment ça qui coince. A coup sûr c'est ça je pense.
     
  42. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Code:
    <?php 
    header("Content-Type: text/html; charset=utf-8");
    ini_set("max_execution_time", 0);
    // On appele le parser pour parcourir la page
    require_once 'simple_html_dom.php';
    // Connection à la base My Sql
    require_once 'connecMysql.php';
    mysql_query("SET NAMES UTF8"); 
    // Création d'un objet dom document
    $id = 1;
    $html = new simple_html_dom();
    // Boucle sur tout les éléments de la base extranet
    while($id <= 2787)
        {
    $url = "https://extranet.edqm.eu/4DLink1/4DCGI/web_view/mono/$id";
    $file = @fopen($url, 'r'); 
    // On test si le fichier existe ou non
    if ($file)
        //Si il exite en commencer à parser la page et récupérer les données
        {
        $html->load_file($url);
        // Sur ces 5 je parcours les lignes du tableau pour me positionner sur l'élément souhaité.
        $monoNumber     =    $html->find('td', 5)->plaintext;
        $englishName    =    $html->find('td', 7)->plaintext;
        $frenchName     =    $html->find('td', 9)->plaintext;
        $latinName      =    $html->find('td', 11)->plaintext;
        $PhEurStatus    =    $html->find('td', 17)->plaintext;
        // On test si le status n'est pas plus grand que 1, cela nous permet de savoir si un texte est aussi présent.
        if(strlen($PhEurStatus) > 1 ){$PhEurDeleted = 1;} else {$PhEurDeleted = 0;}}
        else 
        // SI le fichier n'existe pas alors on ajoute une ligne vide avec l'id pour de futur modification.    
        {
        $monoNumber = $id;
        $englishName = "";
        $frenchName = "";
        $latinName = "";
        $PhEurStatus = "";
        } 
            // Ligne de test(désactivé)
            // echo $monoNumber." ".$englishName." ".$frenchName. " ".$latinName." ".$PhEurStatus."<br/>"; 
            // Requête d'ajout de nos données et gestion des doublons avec ON DUPLICATE KEY UPDATE, si un doublon
            // est détecté la requête se transforme en update.
            $query = "INSERT INTO substances(PhEurMonograph,TermName,PhEurStatus,PhEurDeleted) VALUES('$monoNumber','$frenchName','$PhEurStatus', '$PhEurDeleted')
            ON DUPLICATE KEY UPDATE PhEurMonograph=$monoNumber";
            // On execute la fonction
            $result = mysql_query($query);  
            // On ferme le fichier et livère la mémoire.
            fclose($file); 
    // On incrément l'id de 1 pour changer de document.        
    $id++;
    }
    ?>
    
    Bon ça me parait correct, j'ai tester les 2787 pages web = 40 minutes c'est chaud o_O.
    Je vais voir si je peux pas encore accélérer je test le timestamp et je te dit ca ;)
     
  43. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    Avant que le sujet dérape sur c'est bien c'est mal il ne me semble pas que qqun ai relevé le souci qui me semble évident
    normal elle est publique
    Parce que tu pense qu'ayant fourni un login / mdp dans ton navigateur, ton script (qui s'exécute je sais pas où) va bénéficier de ta connection ?

    Pour ce genre de truc laisse tomber le file_get_content et utilise CURL. Dans les options CURL il faudra que tu introduise (a chaque fois) ton cookies pour que CURL le simule (session et tout le bataclan). Si c'est un cookies de connecté, le serveur te donnera la page. Bref il faut que ton script se comporte comme un navigateur connecté.

    Mais le plus simple (vue que tu as l'air de pas mal caler sur php) c'est encore d'aller sur le site avec ton navigateur et de faire un copier coller de ce que tu veux voir d'enregistrer la page en local pour la parser. A ce sujet ce que tu appel un script de parse n'est pas une fonction de parse mais juste de capture.
     
  44. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Salut zeb, je ne sais pas si tu t'adressais à moi dans ton message ou à toto, j'ai entendu parler de CURL en fessant 1000 de recherches sur Google, penses que que celui ci serait plus rapide que de load chacune des pages ?
     
  45. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    en fait je parlais du script de toto et j'avoue avoir laché le fil a la seconde page lors de l'échange juridico-moral sur la présomption de pompage.

    Ne comprenant pas bien ta réponse mais semblant comprendre que tu as eu du mal avec une source d'info sur curl en voici une autre qui gère le problème du cookie -http://www.developpez.net/forums/d620433/php/bibliotheques-frameworks/services-web/curl-authentification-cookie-deja-cree/
     
  46. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    Dernière fois que je le dis : ce n'est pas une regex et un INSERT dans une bdd qui mettent 40 minutes, c'est le fait de télécharger 3000 pages qui met ce temps là. Si une page met du temps à arriver c'est parcequ'il faut faire une requête, ensuite que le serveur calcul l'affichage de la page, et ensuite que tu la réceptionne.

    dans 40 minutes tu as 2400 secondes... donc en gros ca te prend 1s par page... Et y'a fort à parier que dans cette seconde, la quasi totalité du temps perdu c'est le téléchargement! Et pendant ce temps tu perds du temps parceque le processeur de ta machine ne te sert à rien, ta machine attends la page...

    Bref, tout ça pour en revenir à la solution : le multithread.

    ---

    Sinon j'ai une autre solution à te proposer. Si tu connais deja les url à telecharger (j'imagine que c'est pour mettre à jour des données qui ne t'appartiennent pas...), donc je pars du principe que t'as une bdd avec les urls. Dans ce cas il te suffit d'ajouter une date de crawl à chacune de tes urls, et de mettre une tache cron tous les quarts d'heure, qui ne va chercher qu'une seule page. Ca te permettra d'etaler tout au long du mois la mise à jour et faire en sorte que ce soit en continu. Bien sur ca ne fonctionne que si tes données changent continuellement, et non toutes en meme temps chaque mois...
     
  47. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Re, j'avais bien compris que c'était le dl de la page du temps RiPSO un commit dans un bdd prend qqseconde et encore.
    J'ai eu le mec au tel il ma dit que 40 m de maj ne le dérangerait pas. Donc mon soucis est plus ou moins régler.
    Et même si je ne ferais pas du multithread pour mon employer je vais m'y intéresser personnellement ça à l'air bien puissant.

    Il me reste à gérer plus qu'un truc que j'avais oublié ... :p mais je pense refaire un post à moins que tu sache m'envoyer la solution en live :p.
    Code:
    while($id <= 20)
        {
    $url = "https://extranet.edqm.eu/4DLink1/4DCGI/web_view/mono/$id";
    $file = @fopen($url, 'r'); 
    // On test si le fichier existe ou non
    if ($file)
        //Si il exite en commencer à parser la page et récupérer les données
        {
        $html->load_file($url);
        // Sur ces 5 je parcours les lignes du tableau pour me positionner sur l'élément souhaité.
        $monoNumber     =    $html->find('td', 5)->plaintext;
        $englishName    =    $html->find('td', 7)->plaintext;
        $frenchName     =    $html->find('td', 9)->plaintext;
        $latinName      =    $html->find('td', 11)->plaintext;
        $PhEurStatus    =    $html->find('td', 17)->plaintext;
        // On test si le status n'est pas plus grand que 1, cela nous permet de savoir si un texte est aussi présent.
        if(strlen($PhEurStatus) > 1 ){$PhEurDeleted = 1;} else {$PhEurDeleted = 0;}
        
        }
            // Ligne de test(désactivé)
            // echo $monoNumber." ".$englishName." ".$frenchName. " ".$latinName." ".$PhEurStatus."<br/>"; // Pour test
            // Requète d'ajout de no données et gestion des doublons avec ON DUPLICATE KEY UPDATE, si un doublon
            // est détécté la requète se transforme en update.
            $query = "INSERT INTO substances(PhEurMonograph,TermName,PhEurStatus,PhEurDeleted) VALUES('$monoNumber','$frenchName','$PhEurStatus', '$PhEurDeleted')
            ON DUPLICATE KEY UPDATE PhEurMonograph=$monoNumber";
            // On execute la fonction
            $result = mysql_query($query);  
            // On ferme le fichier et livère la mémoire.
            fclose($file); 
    // On incrément l'id de 1 pour changer de document.        
    $id++;
    }
    Dans ma boucle qui parcourt les pages j'update ma bdd en live en même temps, cependant mon employeur veut avoir une option COMMIT ou ROOLBACK en gros il veut deux boutons après les 40 minutes qui disent valider les changements ou annuler.

    Je recherche donc comment faire pour faire toutes mes querys (2787) et faire un petit commit() à la fin.
    Merci beaucoup pour votre aide :).
    Mes cheveux sont toujours en place ! :lol:
     
  48. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    bin tu doubles tes champs, a la validation il suffit de faire un UPDATE table SET champ1=champ2
     
  49. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Doublés mes champs c'est à dire modifier la structure de ma table ? et rajouter des champs temporaire entres guillemets ?
    Sinon j'avais penser à faire un tableau temporaire j'ajoute une ligne pour chaque produit, et je balance tout le tableau à la fin.
    Cela rejoins en qqsorte ton idée.

    Le fait de doublé les champs fonctionne, merci RiPSO ! :).
    Bon j'ai fini mon script je peux retourner sur SC2 :p
     
  50. RiPSO
    RiPSO WRInaute impliqué
    Inscrit:
    5 Octobre 2007
    Messages:
    948
    J'aime reçus:
    0
    ouais ca revient au meme, sauf niveau perfs je pense.
     
Chargement...
Similar Threads - Parser web utilisant Forum Date
Parser une page web en html Développement d'un site Web ou d'une appli mobile 31 Janvier 2010
Parser une page web ? Développement d'un site Web ou d'une appli mobile 18 Mai 2006
Parser en php un fichier xml Développement d'un site Web ou d'une appli mobile 12 Juin 2020
Parser un fichier xml : simplexml_load_file Développement d'un site Web ou d'une appli mobile 5 Avril 2019
Problème pour parser du xml Développement d'un site Web ou d'une appli mobile 26 Février 2015
Parser du XML Développement d'un site Web ou d'une appli mobile 31 Mars 2012
Parser XML et Mysql Administration d'un site Web 21 Décembre 2011
Parser un flux XML en PHP pour récupérer une valeur Développement d'un site Web ou d'une appli mobile 10 Février 2011
parser une page html Développement d'un site Web ou d'une appli mobile 2 Mars 2010
Parser flux atom facebook Développement d'un site Web ou d'une appli mobile 15 Février 2010
Problème pour parser du contenu en PHP Développement d'un site Web ou d'une appli mobile 2 Février 2010
Problème feedparser et nouvelle page phpbb Développement d'un site Web ou d'une appli mobile 14 Janvier 2010
problème utilisation feedparser Développement d'un site Web ou d'une appli mobile 3 Janvier 2010
DOM Parser (probleme) Développement d'un site Web ou d'une appli mobile 31 Décembre 2009
parser du xml Développement d'un site Web ou d'une appli mobile 30 Mars 2009
[Résolu] Cannot redeclare class XMLParser in ... Développement d'un site Web ou d'une appli mobile 22 Décembre 2008
Parser XML balises sur plusieurs niveaux (API amazon) Développement d'un site Web ou d'une appli mobile 9 Décembre 2008
Parser un xml simple Développement d'un site Web ou d'une appli mobile 4 Décembre 2008
Parser XML Développement d'un site Web ou d'une appli mobile 18 Novembre 2008
Feedparser et magpierss : deux flux différents sur deux div Développement d'un site Web ou d'une appli mobile 17 Septembre 2008