Web scrping

gunslinger -  
 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.
A voir également:

4 réponses

R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   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/


0
gunslinger
 
Salut merci je vai regarder.

Juste pour savoir tu ne conneterai pas un moyen de valider un formulaire html comme un internaute le ferai mais a partir d'un script php. Comme en effectuant une requete http. C ce que j'essaie de faire mais sa ne marche pas.

Merci.
0
R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   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
0
gunslinger > R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   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
0
gunslinger > R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
gunslinger
 
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
0
gunslinger
 
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
0
R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   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.


0
gunslinger > R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention  
 
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;
0
R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   62
 
Apparemment, il ne faut jamais mettre \r\n dans les headers.

0
gunslinger
 
J'ai essayer en les retirant mais sa ne change rien.
0
gunslinger
 
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 ??
0
gunslinger
 
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.
0
R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   62 > gunslinger
 
Tu peux remettre ton code, sans les \n\r ?

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


0
gunslinger1 > R4f Messages postés 441 Date d'inscription   Statut Membre Dernière intervention  
 
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
0