2017-02-27 1 views
0

J'utilise PHP et xpath pour analyser certaines pages HTML: dans un numéro précédent (rif Parsing an HTML page using curl and xpath in PHP), j'ai résolu comment analyser page pour extraire des valeurs.Analyser, utiliser curl et xpath en PHP, une page HTML avec un formulaire avant

Maintenant j'ai une autre page dans laquelle, avant d'obtenir les valeurs que je voudrais analyser, je dois sélectionner une valeur (Venezia dans l'image ..., dans la liste déroulante "Provincia" ...), puis de cliquer sur un bouton ("CERCA" dans l'image ...), avant d'obtenir les valeurs que je voudrais analyser (ce sont les nombres dans les cases rouges, vertes et jaunes de la page ... .)

la page URL est la suite

https://salute.regione.veneto.it/servizi/situazione-nei-pronto-soccorso

et ici vous êtes l'image de la page après la sélection et l'action décrite ci-dessus

enter image description here

Est-il possible, et comment, en PHP, pour simuler cette séquence de navigation HTML pour obtenir la page HTML que j'ai à analyser?

Répondre

1

En PHP, vous pouvez utiliser curl pour afficher les données du formulaire en même URL que l'action de forme: https://salute.regione.veneto.it/servizi/situazione-nei-pronto-soccorso?p_p_id=PRONTOSOCCORSO_WAR_portalprontosoccorso_INSTANCE_o0QZ&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1

et revenir à la page HTML.

Exemple de script php, de https://davidwalsh.name/curl-post Inspiré (vous devez installer curl pour faire fonctionner cet exemple):

<?php 

$url = 'https://salute.regione.veneto.it/servizi/situazione-nei-pronto-soccorso?p_p_id=PRONTOSOCCORSO_WAR_portalprontosoccorso_INSTANCE_o0QZ&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1'; 

$fields = array(
    'ulss'   => '101', 
    'provincia'  => 'BL', 
    'nomPS'   => '', 
    'rossoInAttesa' => '', 
    'gialloInAttesa' => '', 
    'verdeInAttesa' => '', 
    'biancoInAttesa' => '' 
); 

//url-ify the data for the POST 
$fields_string = ""; 
foreach($fields as $key=>$value) { 
    $fields_string .= $key.'='.$value.'&'; 
} 

rtrim($fields_string, '&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 


//execute post 
$result = curl_exec($ch); 

file_put_contents('result_page.html', $result); 

//close connection 
curl_close($ch); 
+0

Est-ce que vous avez un petit échantillon sur la façon de le faire? Je suis un novice en PHP ... merci! (de toute façon aussi votre première suggestion sur l'utilisation PhantomJS pourrait être intéressante ...) – Cesare

+1

Si vous êtes utilisé avec JS, phantomJS pourrait être agréable de faire l'automatisation de la page, mais votre question concerne PHP donc;) – nicolastorre

+0

pourrait être une alternative intéressante ... merci pour l'exemple de code – Cesare