Web scrping

Fermé
Signaler
-
 gunslinger1 -
Bonjour,

Voila j'aimerai faire du web scraping. Pour ceux qui ne saurai pas ce que c'est j'explique je voudrai automatisé des remplissage de formulaire a partir d'une autre page en php.

Pour y parvenir j'utilise la librairie curl mais sa ne fonctionne pas la requete post que j'effectue n'est pas considérer comme la validation du formulaire. Je récupère un message comme quoi je n'ai pas donnée le bon code client.

Est-ce que quelqu'un serais pourquoi sa ne fonctionne pas ? Et surtout comment je pourrai y parvenir ?
Je fais pour récupéré des stats que je traite et que j'affiche après tout est gratuit donc je ne pense pas que de ce coter il y est des problèmes.

Merci beaucoup pour votre aide.

4 réponses

Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
Peut-être avec Perl et HTTP::Recorder qui est un proxy qui te permet d'enregistrer des sessions puis d'en créer des scripts utilisables par le module WWW::Mechanize (qui visite les sites tout seul, mécaniquement)

https://www.perl.com/pub/2004/06/04/recorder.html/


Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62 > gunslinger
En fait, valider un formulaire html, cela n'existe que pour quelqu'un qui est devant son ordinateur avec un navigateur.

Du point de vue du serveur web (et c'est ça qui nous intéresse), il n'y a pas de navigateur, il n'y a que des requêtes (GET/POST). Donc il faut voir le code HTML de la page car c'est elle qui contient le formulaire qu'il faudra remplir...

On peut le faire en PHP avec le module Curl.

http://www.seoblackout.com/2008/02/13/soumission-automatique-formulaire/


Raph
>
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008

C'est ce que je fais.

J'ai regarder le code source de la page puis récupérer toutes les info du formulaire que j'ai remplie dans ma fonction curl mais qd je valide le formulaire la page que j'appelle me mes cette erreur :

The following problem has been reported:

* Your specified referrer company code could not be accepted

et pourtant je lui donne toutes les info qu'elle veut au poils de cul donc soit il me manque qu'elle que chose que j'ai pas vu soit ben jen c rien ...

Merci pour ton aide.
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62 > gunslinger
Tout est dans le message d'erreur :
* Your specified referrer company code could not be accepted 


c'est pour ça que les messages d'erreur sont importants : c'est le moyen de communication entre le développeur d'une application et l'utilisateur...

Donc, il doit y avoir un pb de referer , c'est à dire "la page qui contient un lien vers la page que tu visite" ou alors "la page qui contient le formulaire".

Il faut donc ajouter ça à ton code :

$referer = "http://..."
curl_setopt($ch, CURLOPT_REFERER, $referer);


N'oublie pas de modifier $ch selon ton code et http://... avec l'URL de la page web qui contient le formulaire original.


Raph
>
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008

D'accord je comprend le probleme mais je l'avais mis identique a l'url que j'appelle je vien d'essayer en le pointant sur la page d'avant mais sa ne marche pas non plus c tu pourquoi ??

Merci pour ton aide.
>
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008

je vient de trouver ou était mon problème pour mon referer il me manquais \r\n a la fin maintenant je reçois ce message Length Required c tu pourquoi je reçois sa et comment faire ben pour regler ce probleme ????

Merci
je vien de trouver ce qui n'allais pas avec mon referer il manquait \r\n a la fin et maintenant j'obtien
ce message :

Length Required

c tu pourquoi ???

Merci
je vien de trouver ce qui n'allais pas avec mon referer il manquait \r\n a la fin et maintenant j'obtien
ce message :

Length Required

c tu pourquoi ???

Merci
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
Non car je ne suis pas magicien. Je ne sais rien de ton script, déjà que c'est pas facile lorsqu'on a du code sous les yeux, mais sans code, ça devient.... franchement balaise.


>
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008

voila la partie de mon code qui ne fonctionne pas

$postfields = array(); // les données a envoyer


$header = array();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$header[] = "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$header[] = "Accept-Encoding: gzip,deflate\r\n";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
$header[] = "Keep-Alive: 300\r\n";
$header[] = "Connection: keep-alive\r\n";
$header[] = "Content-Length: 400\r\n";

//url de la page de soumission
$url = "http://www....";
$useragent = "Mozilla/5.0";
$referer = "http://www....\r\n";

//Initialise une session CURL
$ch = curl_init($url);
//CURL options
//on défini les entetes de la requete http
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//On poste les données du tableau $postfields
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
//On définit un useragent ici Mozilla/5.0
//souvent les bots se font passés pour googlebot ce qui finalement est stupide
//On passe donc un useragent banal
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
//On passe un referrer ici on passe la même page $url
curl_setopt($ch, CURLOPT_REFERER, $referer);
//on récupère le contenu de la page de résultat de la soumission dans une chaine
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Page de résultats et fermeture de session
$result = curl_exec($ch);
curl_close($ch);

//on peut faire un echo du résultat obtenu
echo $result;
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62
Apparemment, il ne faut jamais mettre \r\n dans les headers.

J'ai essayer en les retirant mais sa ne change rien.
Je vien de retirer le \r\n de derriere mon referer et maintenant j'ai cette erreur la en gardant mon header :

Bad Request (Invalid Header Name)

ma requete reste la m et maintenant elle serait incorrect je comprend plus rien ??
En faite c comme si il ne prenais pas mon header en compte que je le mette ou pas sa revien au m message d'erreur.
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
62 > gunslinger
Tu peux remettre ton code, sans les \n\r ?

A quoi ça sert le Content-length à 400 ?


>
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008

J'ai essayer mon code sans les \r\n mais sa ne change rien voici mon code sans :

$postfields = array(); // les données a envoyer


$header = array();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,­*/*;q=0.5";
$header[] = "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3";
$header[] = "Accept-Encoding: gzip,deflate";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Keep-Alive: 300";
$header[] = "Connection: keep-alive";
$header[] = "Content-Length: 400";

//url de la page de soumission
$url = "http://www....";
$useragent = "Mozilla/5.0";
$referer = "http://www....\r\n";

//Initialise une session CURL
$ch = curl_init($url);
//CURL options
//on défini les entetes de la requete http
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//On poste les données du tableau $postfields
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
//On définit un useragent ici Mozilla/5.0
//souvent les bots se font passés pour googlebot ce qui finalement est stupide
//On passe donc un useragent banal
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
//On passe un referrer ici on passe la même page $url
curl_setopt($ch, CURLOPT_REFERER, $referer);
//on récupère le contenu de la page de résultat de la soumission dans une chaine
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Page de résultats et fermeture de session
$result = curl_exec($ch);
curl_close($ch);

//on peut faire un echo du résultat obtenu
echo $result;

si je les m pas sur mon referer sa ne fonctionne pas.

le content-lenght c pour spécifié la longueur de la requete envoyer car mon erreur maintenant c sa

Merci