如何从表中有数字的表中提取数据?

时间:2015-03-01 21:17:55

标签: php arrays xpath

在下面的代码中,我编写了从表中提取数据

使用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循环..

1 个答案:

答案 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
        )

)