如何在PHP中创建一个简单的屏幕刮板



我正在尝试创建一个简单的屏幕刮板,让我得到一个特定项目的价格。下面是一个我想获取产品价格的例子:

https://www.flanco.ro/telefon -美孚苹果iphone - 14 - 5 g - 128 g - purple.html

这是我感兴趣的html代码部分:输入图片描述

我想要得到'4699'的东西。

这是我一直在尝试做的,但它似乎不起作用:

$html = file_get_contents("https://www.flanco.ro/telefon-mobil-apple-iphone-14-5g-128gb-purple.html");
$doc = new DomDocument();
$doc->loadHtml($html);
$xpath = new DomXPath($doc);
//Now query the document:
foreach ($xpath->query('/<span class="price">[0-9]*\.[0-9]+/i') as $node) {
echo $node, "n";
}

您可以使用标准的PHP字符串函数来获得$html的价格:

$url   = "https://www.flanco.ro/telefon-mobil-apple-iphone-14-5g-128gb-purple.html";
$html  = file_get_contents($url);
$seek  = '<span class="special-price"><span class="price">';
$end   = strpos($html, $seek) + strlen($seek);
$price = substr($html, $end, strpos($html, ',', $end) - $end);

或者类似的东西。这就是你需要的所有代码。这段代码返回:

4.699

我的观点是:在这种特殊情况下,您不需要解析DOM并使用正则表达式来获得单个价格。

因为页面上有几个价格类。我将特别针对pricesPrp类。

也在你的foreach上,你正试图将一个DOMElement对象转换成一个字符串,这将不起作用

像这样更新xpath查询:

$query = $xpath->query('//div[@class="pricesPrp"]//span[@class="special-price"]//span[@class="price"]');

如果您想查看不同的节点:

echo '<pre>';
foreach ($query as $node) {
var_dump($node);
}

如果你想知道具体的价格:

$price = $query->item(0)->nodeValue;
echo $price;
$html = file_get_contents('PASTE_URL');
$doc = new DOMDocument();
@$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8"));    
@$selector = new DOMXPath($doc);
$result = $selector->query('//span[@class="price"]');
foreach($result as $node) {
echo $node->nodeValue;
}

最新更新