0

我一直在学习在 PHP 中使用 XPath 进行网络抓取,并且我已经成功地从许多网站抓取内容并使用了许多选择器,直到我使用 JSON 进行了尝试。

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

这是 viper-7 中的一个示例,我成功地从网站上抓取了赔率。刮赔率

另一方面,我正在尝试使用相同的代码从正文中抓取一个 json,但我似乎无法正确处理。我不仅尝试使用 json_decode,还尝试使用 json_encode。

这是我似乎无法修复的代码。抓取 JSON

4

1 回答 1

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(我粘贴了所需的库 - 您的代码在清单的末尾)

于 2014-06-05T01:06:54.917 回答