使用PHP中的curl和xpath进行解析,在表单之前使用HTML页面

时间:2017-02-27 08:39:25

标签: php parsing curl xpath html-parsing

我使用PHP和xpath来解析一些HTML页面:在上一期(rif。Parsing an HTML page using curl and xpath in PHP)中,我已经解决了如何解析页面以提取某些值。

现在我还有另一页,在获得我要解析的价值之前,我选择了一个价值(图片中的威尼斯......,在组合框和&#3中) #34; Provincia" ...),然后点击一个按钮(" CERCA"在图片中......),然后点击我想要解析的值(这是页面中红色,绿色和黄色框中的数字....)

网址页面如下

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

此处您在上述选择和操作后的页面图像

enter image description here

是否有可能以及如何在PHP中模拟此HTML导航序列以获取HTML页面,而不是解析?

1 个答案:

答案 0 :(得分:1)

在PHP中,您可以使用curl将表单数据发布到与表单操作相同的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

然后返回HTML页面。

php脚本示例,inspirédehttps://davidwalsh.name/curl-post(您必须安装curl才能使用此示例):

<?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);