DOM Parser Foreach

时间:2011-10-16 03:45:01

标签: php parsing dom screen-scraping html-parsing

有谁知道为什么这不起作用?

foreach($html->find('tbody.result') as $article) {
    // get retail
    $item['Retail'] = trim($article->find('span.price', 0)->plaintext);
    // get soldby
    $item['SoldBy'] = trim($article->find('img', 0)->getAttribute('alt'));

    $articles[] = $item;
}
print_r($articles);

2 个答案:

答案 0 :(得分:1)

试试这个:

$html = file_get_html('http://www.amazon.com/gp/offer-listing/B002UYSHMM');

$articles = array();

foreach($html->find('table tbody.result tr') as $article) {
  if($article->find('span.price', 0)) {
    // get retail
    $item['Retail'] = $article->find('span.price', 0)->plaintext;
    // get soldby
    if($article->find('img', 0)) $item['SoldBy'] = $article->find('img', 0)->getAttribute('alt');
    $articles[] = $item;
  }

}

print_r($articles);

答案 1 :(得分:0)

在我看来,原始代码应该可行。但是simple_html_dom经常会破坏或表现得无法预测。

我建议使用php的内置DomXPath:

$dom = new DOMDocument;
@$dom->loadHTMLFile('http://www.amazon.com/gp/offer-listing/B002UYSHMM');
$xpath = new DOMXPath($dom);

$articles = array();
foreach($xpath->query('//tbody[@class="result"]') as $tbody){
    $item = array();
    $item['Retail'] = $xpath->query('.//span[@class="price"]', $tbody)->item(0)->nodeValue;
    $item['SoldBy'] = $xpath->query('.//img/@alt', $tbody)->item(0)->nodeValue;
    $articles[] = $item;
}

print_r($articles);