2011-12-07 75 views
0

我使用simpleHtmlDom來做一些基本的屏幕抓取。雖然我在抓住產品價格方面遇到了一些問題。有時我可以讓它工作,有時候我不能。此外,有時我會得到多個價格......比如說,該網站有類似「通常100美元...現在79.99美元」的任何建議嗎?目前,我使用的是這樣的:php dom刮 - 抓取產品價格的最佳方法

$prices = array(); 
$prices[] = $html->find("[class*=price]", 0)->innertext; 
$prices[] = $html->find("[class*=msrp]", 0)->innertext; 
$prices[] = $html->find("[id*=price]", 0)->innertext; 
$prices[] = $html->find("[id*=msrp]", 0)->innertext; 
$prices[] = $html->find("[name*=price]", 0)->innertext; 
$prices[] = $html->find("[name*=msrp]", 0)->innertext; 

一個網站,我不知道該怎樣從搶價格的想法是維多利亞的祕密....價格看起來它只是在隨機HTML左右浮動。

+0

你有什麼特別的問題嗎?我們無法想出適合所有可能的標記的解決方案。看看http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php關於使用PHP解析HTML的一些提示。 – Gordon

+0

我期待看看人們用什麼其他方法來獲取產品價格以及獲取正確的價格。我意識到這並不是一個「單一的解決方案」,但必須有比我目前所做的更好的事情。 – Stanley

回答

1

首先,不要使用simplehtmldom。使用內置的dom函數或基於它們的庫。如果你想從頁面中提取所有價格,你可以嘗試這樣的事情:

$html = "<html><body>normally $100... now $79.99</body></html>"; 
$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$xpath = new DomXpath($dom); 

foreach($xpath->query('//text()[contains(.,"$")]') as $node){ 
    preg_match_all('/(\$[\d,.]+)/', $node->nodeValue, $m); 
    print_r($m); 
}