IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Ajax, scraping et ressources du navigateur ?


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 48
    Points : 19
    Points
    19
    Par défaut Ajax, scraping et ressources du navigateur ?
    Bonjour à tous,

    je me tourne vers vous car je suis coincé sur un petit projet perso. Je m'explique :

    j'essaie de mettre en place le scrap automatique d'un site. Je parcours pour cela différentes page classées par date, chacune d'entre elle possédant une liste de lien (les pages que je souhaite justement récupéré en local sur ma machine).

    J'ai donc développé avec mootools une fonction récursive pour parcourir les pages contenant les liens. La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function callActionGetCoursesJour(date) {        
        new Request.JSON({
            url:'http://localhost/xxxxxxx/getCoursesJour?date='+date,
            onSuccess: function(returnJSON){           
                var pDate=new Element('p');
                pDate.set('html', '<br /><br />'+date);
                pDate.inject($('retour'));
     
                Object.each(returnJSON.allCourses, function(value, key){
                    new Request({
                        onSuccess: function(){           
                            var pCourse=new Element('p');
                            pCourse.set('html', value);
                            pCourse.inject($('retour'));
                        }
                    }).send();
                });
     
                setTimeout(function(){ callActionGetCoursesJour(returnJSON.demain); },Number.random(1000000000,100000000000));
            }
        }).send();
    }
    Et voici la fonction php qui crawl la page demandé et récupère les différents liens (ceux dont je vais récupérer la page ultérieurement)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public function processGetCoursesJour() {
            $date=_request('date');
            $return=array(); // tableau que je retourne en json
     
            // je récupère un tableau listant les différentes courses du jour
            $allCourses=array();
     
            // je récupère le code html de la page listant les courses du jour
            $url="http://xxxxxxxxxx?date=".$date; 
     
            $doc = new DOMDocument();
            @$doc->loadHTMLFile($url);
            $xpath=new DomXPath($doc);
            // je récupère les divs contenant les liens vers les courses
            $allInfosCourse=$xpath->query('//*[contains(@class,"infosCourse")]');
     
            // pour chacun de ces div
            foreach ($allInfosCourse as $uneInfoCourse) {
                // je récupère les différentes lignes de la table contenant les différentes courses
                $allLignes=$uneInfoCourse->getElementsByTagName('table')->item(0)->getElementsByTagName('tr');
     
                for ($i=1;$i<$allLignes->length;$i++) {
                    // je récupère pour chaque ligne (sauf la 1ère) toutes les colonnes
                    $allColonnes=$allLignes->item($i)->getElementsByTagName('td');
     
                    $urlFicheCourse=$allColonnes->item(1)->getElementsByTagName('a')->item(0)->getattribute('href');
                    $allCourses[]=$urlFicheCourse;
                }
            }
            $return['allCourses']=$allCourses;
     
            // puis j'affiche la date suivante pour la renvoyer et la récuperer via ajax
            $dateExplode=explode('-',$date);
            $demain = date("Y-m-d",mktime(0,0,0,$dateExplode[1],$dateExplode[2]-1,$dateExplode[0]));
            $return['demain']=$demain;
     
            echo json_encode($return);
     
            return _arNone ();
        }

    Tout fonctionne correctement, je crawl bien la page 2013-01-13, puis 2013-01-12... je récupère bien les liens contenu à chaque fois dans la page... mais au bout de quelques minutes, mon navigateur stoppe tout. Les requêtes ne se font plus.

    Quelqu'un aurait une idée ? Ou peut-être une autre manière de faire ? Je suis ouvert à toute suggestion ou discution.

    Merci d'avance à tous !!

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonsoir,
    ce qui m'échappe un peu c'est à quoi te servent, texte mis en rouge.
                Object.each(returnJSON.allCourses, function(value, key){
                    new Request({
                        onSuccess: function(){           
                            var pCourse=new Element('p');
                            pCourse.set('html', value);
                            pCourse.inject($('retour'));
                        }
                    }).send();
                });

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 48
    Points : 19
    Points
    19
    Par défaut
    Honnêtement, je crois que c'est un reste de test pas supprimé
    Ou alors, et je crois que c'est ça, c'est pour appeler une nouvelle fonction sur chaque url tout en restant sur la même page et boucler ainsi

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    As tu au moins essayé en mettant en commentaire ces lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Object.each(returnJSON.allCourses, function (value, key) {
    //  new Request({
    //    onSuccess: function () {
          var pCourse = new Element('p');
          pCourse.set('html', value);
          pCourse.inject($('retour'));
    //    }
    //  }).send();
    });

Discussions similaires

  1. Ajax dans une boucle while , navigateur crash ?
    Par welcsk dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/10/2016, 15h51
  2. [AJAX] jquery.ajax json retourne 0 selon navigateur
    Par cuisto44000 dans le forum jQuery
    Réponses: 1
    Dernier message: 01/05/2015, 13h24
  3. Erreur Ajax Control Toolkit ressources introuvable
    Par LyShAzz dans le forum ASP.NET Ajax
    Réponses: 3
    Dernier message: 08/01/2014, 10h58
  4. Réponses: 3
    Dernier message: 09/05/2009, 01h25
  5. [AJAX] Modifier l'url du navigateur
    Par SpIrIt505050 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/02/2009, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo