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 :
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 : 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(); }
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 !!
Partager