通过网络抓取PHP获得价格

时间:2019-11-08 14:05:38

标签: php web-scraping

我是新手,我正在使用php库“ PHP Simple HTML DOM Parser”来获取该网站上产品的价格和日期: http://www.mercadopublico.cl/TiendaFicha/Ficha?idProducto=1557392

This image shows the values that I want to obtain

This information delivers the inspect elements

我有以下代码:

<?php

include('simplehtmldom/simple_html_dom.php');

// get DOM from URL or file
$html = file_get_html('http://www.mercadopublico.cl/TiendaFicha/Ficha?idProducto=1557392');

// find all span tags with id=spPrecio
foreach($html->find('span#spPrecio') as $e)
    echo $e->outertext . '<br>';
?>

但是我无法获得所需的东西,只能得到标题h3之类的数据。我尝试了许多解决方案,但对我没有任何帮助,请给我帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

在浏览器开发人员工具中检查了网络流量之后,您可以看到HTML的部分加载了(您从file_get_html获得的HTML),然后JavaScript通过XHR请求对其进行了修改。 您的价格通过此链接加载:

http://www.mercadopublico.cl/TiendaFicha/Ficha/ObtenerPrecioMenor?idProducto=1557392&idConvenioMarco=5800221&_=1574869395485

其中的参数是:

idProducto=1557392
idConvenioMarco=5800221
_=1574869395485

idProducto-在您提供的链接中。

在您下载的DOM中找到

IdConvenionMarco:

<input data-val="true" data-val-number="The field IdConvenioMarco must be a number." data-val-required="The IdConvenioMarco field is required." id="hdnIdConvenioMarco" name="ProductosConvenio.IdConvenioMarco" type="hidden" value="5800221" />

最后一个_是UNIX时间戳(以毫秒为单位)。 拥有这三个参数可以为您提供任何产品价格。响应使用JSON:

{"Precio":"$ 2.178","Estado":true}