如何解析作为POST请求结果的HTML页面(在PHP中使用curl,JSONPath,Xpa​​th)?

时间:2017-12-28 15:03:58

标签: php json curl xpath jsonpath

我需要解析这个网页....

http://monitorps.sardegnasalute.it/monitorps/MonitorServlet?page=carLavoroPresidi&tipoProntoSoccorso=TUTTI&codiceAziendaSanitaria=200102&idPresidio=102MAD02&indirizzo=null&idProntoSoccorso=30

...使用PHP提取表格中的数字“ROSSO”,“GIALLO”,“VERDE”和“BIANCO”。

enter image description here

(注意:如果您尝试浏览它,您可以在该页面中看到不同的值...它无关紧要......,它会改变它的恐怖性......)

这些值是网页内的POST请求结果。

这是我用来使用curl发送POST请求的PHP代码,而不是解析JSON响应(使用Skyscanner JSON Path ..它在我的代码中运行良好..),尝试使用提取值一个XPath解析。

componentWillUnmount()

结果如下图所示

enter image description here

其中表是我的代码中命令的结果......

<?php
    include "./tmp/vendor/autoload.php";

    $ch = curl_init();

    curl_setopt_array($ch, array(
      CURLOPT_URL => "http://monitorps.sardegnasalute.it/monitorps/MonitorServlet",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "idMacroArea=null&codiceAziendaSanitaria=200102&idAreaVasta=null&idPresidio=102MAD02&idProntoSoccorso=30&tipoProntoSoccorso=TUTTI&vicini=null&xhr=true",
      CURLOPT_HTTPHEADER => array(
        "cache-control: no-cache",
        "content-type: application/x-www-form-urlencoded"
      ),
    ));

    $server_output = curl_exec ($ch);

    curl_close ($ch);

    $jsonObject = new JsonPath\JsonObject($server_output);

    $jsonPathExpr = '$..view';

    $res = $jsonObject->get($jsonPathExpr);
    print $res[0];

    $dom = new DOMDocument();
    @$dom->loadHTML(json_encode($res[0]));

    $xpath = new DOMXPath($dom);

    $xpath_for_parsing = '/html/body/div[1]/div/div/div/table/tbody/tr[2]/td[4]';

    $colorWaitingNumber = $xpath->query($xpath_for_parsing);
    $theValue =  'N.D.';
    foreach( $colorWaitingNumber as $node )
    {
      $theValue = $node->nodeValue;
    }

    print $theValue;

    ?>

N.D

是我尝试解析以提取我想要的值之一的结果

关于我正在使用的xpath我已经检查过它,并使用页面源代码进行验证......

我在哪里做错了?

1 个答案:

答案 0 :(得分:0)

我已经解决了!

我的原始代码是&#34;相当&#34;是的,除了错误。

您已对这一行发表评论......

//@$dom->loadHTML(json_encode($res[0]));

并用这个替换它

@$dom->loadHTML($res[0]);

一切都会好起来的!