使用XPATH和JSON进行php web抓取

时间:2014-06-04 23:55:14

标签: php xpath web-scraping jsonpath

我在PHP中使用XPath学习了一些网页抓取工作,我已成功从许多网站上抓取内容并使用了许多选择器,直到我尝试使用JSON。

我觉得非常奇怪的是,当我在浏览器中运行命令$x("//body/text()");时,我得到了所需的结果,但我的代码中出现了问题,我不知道它是什么。

这是viper-7中的一个例子,其中我成功地从网站中获取赔率。 scraped Odds

另一方面,我试图使用相同的代码从身体上刮掉一个json,但我似乎无法做到正确。我不仅尝试使用json_decode而且还使用json_encode。

这是我似乎无法解决的代码。 scrape JSON

1 个答案:

答案 0 :(得分:2)

如果要搜索JSON,则应使用JSONPath,而不是XPath:

<?php
    require_once('json.php');
    require_once('jsonpath.php');

    $parser = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);

    $json = file_get_contents('https://www.realproperty.cl/mobilData.php?functName=getInmuebles&inmuebleID=561');
    $o = $parser->decode($json);
    $result = jsonPath($o, "$..descripcion");

    echo '<ul>'."\n";
    foreach ($result as $item) {
        echo '    <li>'.$parser->encode($item).'</li>'."\n";
    }
    echo '</ul>'."\n";
?>

您需要jsonpath.phpjson.php

打印:

<ul>
    <li>"Edificio Trancura se encuentra ubicado en un importante sector residencial de la comuna de Las Condes, a pasos de Av. Crist\u00f3bal Col\u00f3n, cercano a diversos servicios como supermercados, restaurantes, farmacias, strip center, etc.\r\n\r\nEste proyecto cuenta con un innovador dise\u00f1o que incluye espacios de doble altura en los departamentos (3 dormitorios), lo que genera una gran sensaci\u00f3n de amplitud y a su vez permite un mejor ingreso de luz natural.\r\n\r\nRecibimos su propiedad en parte de pago."</li>
    <li>"Elevador"</li>
    <li>"Condominio"</li>
    <li>"Estacionamiento Visitas"</li>
    <li>"Bodega"</li>
    <li>"Estacionamiento cubierto"</li>
    <li>"ATM"</li>
    <li>"Colegio"</li>
    <li>"Farmacia"</li>
    <li>"Mall"</li>
    <li>"Parada Bus"</li>
    <li>"Parada de taxi"</li>
    <li>"Restaurante"</li>
    <li>"Supermercado"</li>
    <li>"Universidad"</li>
</ul>

请参阅http://viper-7.com/hMxQLa(我粘贴了所需的库 - 您的代码位于列表末尾)