begin process at 2010 09 02 22:23:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > CRAWLER DE SITE EN PHP

CRAWLER DE SITE EN PHP


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :Crawler, Bot php, Formulaire Niveau :Initié Date de création :26/11/2009 Date de mise à jour :26/11/2009 13:43:02 Vu / téléchargé :3 295 / 180

Auteur : Mcjo

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

!!! Attention nécessite curl !!!!

Cette source permet de créer un mini crawler php pour récupérer des pages php qui peuvent nécessité un formulaire d'authentification.
Cette classe gère les cookies de session et permet aussi de changer l'identité du navigateur.

Il s'agit d'une classe que j'ai adapté d'une classe existante, mais je ne retrouve pas le liens de la version originale.

Les sources de la classes se trouvent dans le zip.

Petit conseil d'utilisation, pour faciliter la tache de vérification des variables transmises au serveur dans les formulaires, j'utilise l'outil de surveillance réseau de firebug.


Source

  • <?php
  • // Exemple d'utilisation sur le site de phpcs :)
  • include "classes/crawler.php";
  • /**
  • connexion et authentification
  • */
  • $myCrawler = new Crawler("phpcs", "true", "http://www.phpcs.com/login.aspx",
  • /** formulaire d'authentification **/
  • array("_ASYNCPOST" => "true",
  • "__EVENTARGUMENT" => "",
  • "__EVENTTARGET" => "m\$CPH1\$LoginCS\$btnConnect",
  • "__LASTFOCUS" => "",
  • "__VIEWSTATE" => "/wEPDwUKLTk2MTMxMDA4Mw9kFgJmD2QWAgICEGRkFggCAw9kFgICAQ8WAh4HVmlzaWJsZWhkAgQPZBYEAgIPEA8WAh8AaGRkZGQCAw8PFgIfAGhkFgICAQ8QZGQWAGQCBQ9kFgJmD2QWCgICDw8WAh4PVmFsaWRhdGlvbkdyb3VwBRRjdGwwMF9DUEgxX0xvZ2luQ1NfdmRkAgMPDxYCHwEFFGN0bDAwX0NQSDFfTG9naW5DU192ZGQCBg8PFgIfAQUUY3RsMDBfQ1BIMV9Mb2dpbkNTX3ZkZAIHDw8WAh8BBRRjdGwwMF9DUEgxX0xvZ2luQ1NfdmRkAgsPZBYCZg9kFgRmDw8WBB8AZx4EVGV4dAU3RXJyZXVyIGxvcnMgZGUgbGEgc2Fpc2llIGRlIHZvdHJlIGxvZ2luIG91IG1vdCBkZSBwYXNzZWRkAgEPDxYCHwEFFGN0bDAwX0NQSDFfTG9naW5DU192ZGQCCQ9kFgICAQ8WAh8AaGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFG20kQ1BIMSRMb2dpbkNTJGNiUmVtZW1iZXJNZR+7aAhacpuYY8BQX2vS39YeG/8/",
  • "l" => "0",
  • /** mdp d'authentification **/
  • "m\$CPH1\$LoginCS\$tbPassword" => "mot de passe",
  • /** user d'authentification **/
  • "m\$CPH1\$LoginCS\$tbUserName" => "nom d'utilisateur",
  • "m\$SC1" => "m\$CPH1\$LoginCS\$upp|m\$CPH1\$LoginCS\$btnConnect",
  • "m\$UCTabsHome1\$DropSearch" => "tout",
  • "m\$UCTabsHome1\$txtSearch" => ""
  • )
  • );
  • /**
  • récupération d'une page get
  • */
  • $res = $myCrawler->http_fetch_url("http://www.phpcs.com/default.aspx");
  • //affichage du resultat
  • echo $res;
  • /**
  • récupération d'une page post
  • */
  • $res = $myCrawler->http_post_url("http://www.phpcs.com/default.aspx",
  • //formulaire post
  • array(
  • "__VIEWSTATE" => "/wEPDwULLTEzMzU1MjE5NzcPZBYCZg9kFgICAhBkZBYGAgMPZBYCAgEPFgIeB1Zpc2libGVoZAIED2QWBAICDxAPFgIfAGhkZGRkAgMPDxYCHwBoZBYCAgEPEGRkFgBkAgkPZBYCAgEPFgIfAGhkZNiqbZSK+5ynghDGsF2xMCr7KBF2"
  • ,"l" => "0"
  • ,"m\$UCTabsHome1\$DropSearch" => "tout"
  • ,"m\$UCTabsHome1\$GGSearch" => "Rechercher"
  • ,"m\$UCTabsHome1\$txtSearch" => "socket"
  • )
  • );
  • //affichage du resultat
  • echo $res;
  • ?>
<?php

// Exemple d'utilisation sur le site de phpcs :)

include "classes/crawler.php";

/**
connexion et authentification
*/
$myCrawler = new Crawler("phpcs", "true", "http://www.phpcs.com/login.aspx",
/** formulaire d'authentification **/
array("_ASYNCPOST" => "true",
"__EVENTARGUMENT" => "",
"__EVENTTARGET" => "m\$CPH1\$LoginCS\$btnConnect",
"__LASTFOCUS" => "",
"__VIEWSTATE" => "/wEPDwUKLTk2MTMxMDA4Mw9kFgJmD2QWAgICEGRkFggCAw9kFgICAQ8WAh4HVmlzaWJsZWhkAgQPZBYEAgIPEA8WAh8AaGRkZGQCAw8PFgIfAGhkFgICAQ8QZGQWAGQCBQ9kFgJmD2QWCgICDw8WAh4PVmFsaWRhdGlvbkdyb3VwBRRjdGwwMF9DUEgxX0xvZ2luQ1NfdmRkAgMPDxYCHwEFFGN0bDAwX0NQSDFfTG9naW5DU192ZGQCBg8PFgIfAQUUY3RsMDBfQ1BIMV9Mb2dpbkNTX3ZkZAIHDw8WAh8BBRRjdGwwMF9DUEgxX0xvZ2luQ1NfdmRkAgsPZBYCZg9kFgRmDw8WBB8AZx4EVGV4dAU3RXJyZXVyIGxvcnMgZGUgbGEgc2Fpc2llIGRlIHZvdHJlIGxvZ2luIG91IG1vdCBkZSBwYXNzZWRkAgEPDxYCHwEFFGN0bDAwX0NQSDFfTG9naW5DU192ZGQCCQ9kFgICAQ8WAh8AaGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFG20kQ1BIMSRMb2dpbkNTJGNiUmVtZW1iZXJNZR+7aAhacpuYY8BQX2vS39YeG/8/",
"l" => "0",
/** mdp d'authentification **/
"m\$CPH1\$LoginCS\$tbPassword" => "mot de passe",
/** user d'authentification **/
"m\$CPH1\$LoginCS\$tbUserName" => "nom d'utilisateur",
"m\$SC1" => "m\$CPH1\$LoginCS\$upp|m\$CPH1\$LoginCS\$btnConnect",
"m\$UCTabsHome1\$DropSearch" => "tout",
"m\$UCTabsHome1\$txtSearch" => ""
)
);

/**
récupération d'une page get
*/
$res = $myCrawler->http_fetch_url("http://www.phpcs.com/default.aspx");

//affichage du resultat
echo $res;


/**
récupération d'une page post
*/
$res = $myCrawler->http_post_url("http://www.phpcs.com/default.aspx",
//formulaire post
array(
"__VIEWSTATE" => "/wEPDwULLTEzMzU1MjE5NzcPZBYCZg9kFgICAhBkZBYGAgMPZBYCAgEPFgIeB1Zpc2libGVoZAIED2QWBAICDxAPFgIfAGhkZGRkAgMPDxYCHwBoZBYCAgEPEGRkFgBkAgkPZBYCAgEPFgIfAGhkZNiqbZSK+5ynghDGsF2xMCr7KBF2"
,"l" => "0"
,"m\$UCTabsHome1\$DropSearch" => "tout"
,"m\$UCTabsHome1\$GGSearch" => "Rechercher"
,"m\$UCTabsHome1\$txtSearch" => "socket"
)
);

//affichage du resultat
echo $res;

?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 novembre 2009 13:43:03 :
Nécessite CURL

 Sources de la même categorie

MULTIPLIEZ LES TIMERS SUR VOS SCRIPTS PHP ET BENCHEZ FACILEM... par MonkeyIsBack
Source avec Zip Source avec une capture AFFICHER UNE IMAGE SANS IMAGE (GRÂCE AUX URI) par Astalavista
Source avec Zip EXÉCUTER UN SCRIPT PHP EN TANT QUE SERVICE WINDOW par ig3
Source avec Zip Source avec une capture LOGGER LE TEMPS D'EXÉCUTION DE VOS FONCTIONS PHP par djroulo
LA DIFFÉRENCE ENTRE DEUX DATE EN PLUSIEURS FORMATS par nasro81

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PHPJSVFORM : DES CLASSES PHP, DES JAVASCRIPTS POUR CRÉER FAC... par synanceia
FORMULAIRE BBCODE AVEC PASSAGE EN HTML par Seby63
Source avec Zip PDS-PERTINENCE par bcmfr
Source avec Zip PDS-SONDAGES par bcmfr
Source avec Zip Source avec une capture FORMULAIRE DE RECOMMANDATION DE SITE par Dje33

Commentaires et avis

Commentaire de rosamoon le 30/11/2009 01:21:01

Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /mnt/123/free.fr/1/7/mon_compte/crawler/classes/crawler.php on line 12

ça veut dire quoi ? impossible chez free ?

Commentaire de Mcjo le 30/11/2009 09:47:55

Ça veut dire que sur free, vous devez activer php5, en plaçant le .htaccess adéquate.
Bonne journée

Commentaire de Mcjo le 30/11/2009 09:49:11

Mais de toute façon Free n'autorise pas l'ouverture de socket depuis php (à moins que cela est changé), donc ça risque de ne pas marcher.

Commentaire de tagalog75 le 30/11/2009 11:48:36

Pas que che Free : même erreur :
Idem pour mon compte professionnel chez Amen :
Parse error: parse error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/.sites/69/siteX/web/monespace/crawler/classes/crawler.php on line 12

Alors, que faire ? si vous avez une solution, je suis preneur.

Commentaire de Mcjo le 30/11/2009 14:59:34

Tu es sure d'être en php 5.1.2 minimum ?
Il semble que ta version de php ne gère pas les constante de classe.
Remplace
const USER_AGENT ...
//const USER_AGENT

et la ligne

$this->user_agent = (!is_null($user_agent)?$user_agent:Crawler::USER_AGENT);

par

$this->user_agent = (!is_null($user_agent)?$user_agent:'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14');

Commentaire de tagalog75 le 02/12/2009 22:33:22

Ca marche pas plus, désolé.
Comme la classe crawler du php5 n'est pas installée sur les 2 serveurs restés en php4 je sais plus combien, il faut adapter et mettre des //devant public par exemple.

Les fonctions fetch et get de récupération des données n'étant pas reconnues, la seule possibilité est de les enlever, le code fonctionne.
Oui, mais voilà : ça passe sans erreur mais comme on ne récupère aucune donnée d'aucun site, on affiche une page blanche.
Il faut juste trouver le moyen de récupérer les données dans le fichier sample.php.
Une idée peut-être ?
merci

Commentaire de Mcjo le 03/12/2009 15:17:24

bon je te renvoie un code source ou j'ai remplacé la constante par une variable et définie des fonctions sans public (mais ça ne change rien puisque en php si pas private -> public)

Maintenant si tu as un problème vérifie que tu sois en php et surtout que tu ais le module CURL pour php

:

<?php
/**
* Crawler
* botcrawler
*
* @package     Crawler
* @since       1.0
* @version     $Revision: 1 $
*/
class Crawler {

var $USER_AGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14';
var $authentification_form;
var $authentification_url;
var $must_auth;
var $site_name;
var $cookies_path;
var $user_agent;

/**
* Constructor
*
* @param string $site_name name of site used for define the name of the cookie
* @param boolean $must_auth define if the site requiere an authenficiation - false by default,
* @param string $authentification_url url for authentification - empty by default
* @param array $authentification_form mixed value of the authenfication form
* @param string $user_agent set another user_agent
* @return void
*
*/
function Crawler($site_name, $must_auth = false, $authentification_url = "",  $authentification_form = array(), $user_agent = null, $debug = false) {

$this->user_agent = (!is_null($user_agent)?$user_agent:$this->USER_AGENT);

$this->site_name = $site_name;
$this->must_auth = $must_auth;
$this->authentification_url = $authentification_url;
$this->authentification_form = $authentification_form;
if (is_file("cookies/{$this->site_name}_cookie.txt")) {
unlink("cookies/{$this->site_name}_cookie.txt");
}
$fp_cookies = fopen("cookies/{$this->site_name}_cookie.txt", "w+");
fwrite($fp_cookies, '');
fclose($fp_cookies);

$this->cookies_path = realpath("cookies/{$this->site_name}_cookie.txt");

if ($this->must_auth) {
$ch = curl_init($authentification_url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $authentification_form);
curl_setopt($ch, CURLOPT_COOKIEFILE , $this->cookies_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookies_path);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_COOKIESESSION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
$ret = curl_exec($ch);
if ($ret === FALSE) {
die(curl_error());
}
if ($debug) echo "<pre>Debug :\n".print_r($ret, true)."</pre>";
curl_close($ch);
if (preg_match('/(PHPSESSID=[0-9a-z,-]{32,40})/i', $ret, $m)) {
$sid = '?' . $m[1];
} else if (preg_match('#<input\s+type="hidden"\s+name="([^\r\n\t <>\'"\\\]+)"\s+value="([0-9a-z,-]{32,40})"\s*/?>#i', $ret, $m)) {
$sid = '?' . $m[1] . '=' . $m[2];
}
}
}

/**
* method to access to a page by get
*
* @param string $url
* @param integer $timeout
* @return content of page
*/
function http_fetch_url($url, $timeout = 1000)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE , $this->cookies_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookies_path);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_COOKIESESSION, false);
curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
$data = curl_exec($ch);
curl_close($ch);

return $data;
}

/**
* method to access to a page by post
*
* @param stirng $url
* @param array $form array of string value of data post
* @param integer $timeout
* @return content of page
*/
function http_post_url($url, $form = array('none'=>'none'), $timeout = 1000)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE , $this->cookies_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookies_path);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($form));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_COOKIESESSION, false);
curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

}

?>

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

formulaire mail [ par arnaud ] quand je recoit un formulaire mail je trouve le fichier postdata.att ... comment fair pour l'avoir sans les 20% et les "+"merciarnaud php et html [ par Vinz ] Salut,Voila, j'utilise un formulaire qui me lance un php. Dans ce formulaire j'ai un &lt;input type=file name='monFile'&gt;.Mon probleme c'est que j'a Formulaire PHP3 + PJ [ par Jiboule ] Salut à tous ! Quelqu'un peut-il me sauver ? J'ai fait un formulaire en HTML avec une dizaine de champs + la possibilité de joindre un fichier. Je ne Formulaire PHP3 + PJ [ par Jiboule ] Salut à tous ! Quelqu'un peut-il me sauver ? J'ai fait un formulaire en HTML avec une dizaine de champs + la possibilité de joindre un fichier. Je ne code simple pour formulaire [ par bernard ] bonsoir à tous, je suis débutant de chez débutant et j'ai besoin d'aide.je voudrais réaliser un programme en php.il s'agit d'un formulaire où le visit Formulaire + fichier externe [ par koko ] J'ai un petit formulaire avec 2 text (&lt;INPUT TYPE="text") et un button. Quand je clique sur le button, il doit mettre les 2 text dans un fichier ex Formulaire et SQL [ par Christophe46 ] Salut,J'espère trouver de l'aide sur ce forum,J'ai fait une base de données MySql, avec une table et des champs comme nom, prenom, telephone, adresse, Formulaire et SQL [ par Christophe46 ] Salut,J'espère trouver de l'aide sur ce forum,J'ai fait une base de données MySql, avec une table et des champs comme nom, prenom, telephone, adresse, Formulaire [ par benett ] Bonjour à tous,J'ai une petite question :Dans un formulaire, certaine valeurs s'obtiennent par recopie et proviennent d'une autre page,comment peut-on Formulaire [ par benett ] Bonjour à tous,J'ai une petite question :Dans un formulaire, certaine valeurs s'obtiennent par recopie et proviennent d'une autre page,comment peut-on


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales