在下面的代码中,我编写了从表中提取数据
使用xpath我得到名字,但价格类属性是数字增加
<td id="f_4142_39_pr"></td> , <td id="f_4139_39_pr"></td> , <td id="f_4136_39_pr"></td> ,...
我无法获得所有价格
以下是قیمت روز گوشی موبایل我的代码
$produsttitleQuery = $xpath->query("//tr/td[@class='entry entryltr'] ");
$produstpriceQuery = $xpath->query("//tr/td[@class='f_4136_39_pr']");
$data = array();
$data = array();
for ($x=0; $x<20; $x++){
$data[$x]['title'] = $produsttitleQuery->item($x)->nodeValue;
$data[$x]['price'] = $produstpriceQuery->item($x)->nodeValue;
}
echo '<pre>';
print_r($data);
-
Array
(
[0] => Array
(
[title] => Dell 5537
[price] =>
)
[1] => Array
(
[title] => Dell 3521
[price] =>
)
,...
问题2:我想在顶级代码中使用foreach循环..
答案 0 :(得分:3)
如果PHP支持XPath 2.0,您可以使用matches()
函数,但PHP仅支持XPath 1.0,因此这不是一个选项。在您的情况下,HTML看起来相当固定,因此您可以通过使用索引将其称为产品标题td
元素的兄弟(父级的子级)来获得价格。
有时候在这个页面上,价格被包裹在一个范围内,我也在下面考虑过。代码不是防弹的,但我希望无论如何都会有所帮助。
$url = 'http://www.iranjib.ir/showgroup/95/'
. '%D9%82%DB%8C%D9%85%D8%AA-%D8%B1%D9%88%D8%B2-'
. '%D9%84%D9%BE-%D8%AA%D8%A7%D9%BE/';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url); // Suppress loads of warnings
$xpath = new DOMXPath($dom);
// Loop product title nodes
$titleQuery = $xpath->query("//tr/td[@class='entry entryltr']");
for ($i = 0; $i < $titleQuery->length; $i++) {
$titleNode = $titleQuery->item($i);
$priceNode = $titleNode->parentNode->childNodes->item(16); // Price sibling
$itemData['title'] = trim($titleNode->nodeValue);
if ($priceNode) {
// If price is within a span
$lastPriceSpanNodeQuery = $xpath->query(
".//span[@class='lastprice']", $priceNode
);
if ($lastPriceSpanNodeQuery->length) {
// Get price from td/span
$priceNode = $lastPriceSpanNodeQuery->item(0);
}
$itemData['price'] = trim($priceNode->nodeValue);
}
$data[] = $itemData;
}
print_r($data);
输出:
Array
(
[0] => Array
(
[title] => DELL XPS L502 X
[price] => 0
)
[1] => Array
(
[title] => Dell 5537
[price] => 2,048,874
)
...
[119] => Array
(
[title] => Lenovo G510
[price] => 2,335,392
)
)