【问题标题】:DOM Parser ForeachDOM 解析器 Foreach
【发布时间】:2011-12-08 14:14:44
【问题描述】:

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

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);

【问题讨论】:

  • 您使用的 HTML 解析器是什么?
  • 你想用什么 URL 解析?
  • www.amazon.com/gp/offer-listing/B002UYSHMM

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


【解决方案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);

【讨论】:

  • 由于某种原因,它添加了两次第一次零售。
【解决方案2】:

在我看来,原始代码应该可以工作。但是 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2013-07-24
    • 2013-03-18
    • 1970-01-01
    • 2013-01-31
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多