【问题标题】:Simple DOM Parser IF not working简单的 DOM 解析器如果不工作
【发布时间】:2011-12-15 07:54:25
【问题描述】:

谁能告诉为什么第二个 if 语句提取 soldby 名称不能正常工作?

我想要它做的是从图像中提取 alt 属性,如果有卖家的图像 - 这有效。但是,如果没有图像徽标,则会有一个带有卖家名称的粗体标签,我希望将其插入到数组中与 alt 标签相同的位置。

我正在使用的 HTML 是:http://amazon.com/gp/offer-listing/B002UYSHMM

谁能帮忙?

谢谢!

$item = array();

foreach ($html->find('div.resultsset table tbody.result tr') as $article) { 
  if ($article->find('span.price', 0)) {  
    // get retail  
    $item[$retail.$i++] = $article->find('span.price', 0)->plaintext;  
    // get soldby
    if ($article->find('ul.sellerInformation img', 0)) {
      $item[$soldby.$j++] = $article->find('ul.sellerInformation img', 0)->getAttribute('alt');
    } else {
      $item[$soldby.$j++] = $article->find('ul.sellerInformation li a b', 0)->plaintext;
    }
    $ret['SellerInfo'] = $item;
  }
}

这是我从上面的代码中得到的数组:

 Array ( [0] => Array ( [Retail] => $219.88 [SoldBy] => J&R Music and Computer World ) [1] => Array ( [Retail] => $234.21 [SoldBy] => PORTABLE GUY ) [2] => Array ( [Retail] => $235.73 [SoldBy] => The Price Pros ) [3] => Array ( [Retail] => $234.74 [SoldBy] => GizmosForLife ) [4] => Array ( [Retail] => $230.00 [SoldBy] => ) [5] => Array ( [Retail] => $198.73 [SoldBy] => ) [6] => Array ( [Retail] => $240.72 [SoldBy] => ) [7] => Array ( [Retail] => $248.99 [SoldBy] => onSale ) ) 

您可以看到它缺少 SoldBy for:

STEPHS 好书宝藏

Diakonos23

最佳房子

【问题讨论】:

  • 你可能想要包含有问题的 HTML,我的心灵感应技能今天用完了……
  • 糟糕!对不起,我在上面添加了一个链接。这是亚马逊优惠列表页面。
  • @GolezTrol 抱歉,这是我的错,问题是在我编辑以修复代码间距时由 OP 编辑​​的,我的编辑吃了他的。现已修复。
  • 查看 html 我没有看到与 li a b 匹配的内容
  • 这匹配 li a b: STEPHS GREAT BOOK TEASURES

标签: php parsing dom html-parsing


【解决方案1】:

除了不使用b 是明智的,您的选择器也不同。第一个直接选择列表中的图像,而第二个需要在链接内的粗体标记,在列表项内。

【讨论】:

  • 我知道使用 b 可能是不明智的,但在这种情况下我别无选择。如果我单独使用选择器,它们都可以工作,但在 IF 语句中,当没有图像时它们不起作用。它只是打印空白。
【解决方案2】:

您是否尝试过使用

if (count($article->find('span.price'))) {

if (count($article->find('ul.sellerInformation img'))) {

?

【讨论】:

  • 我没有。我如何在代码中实现计数?我不确定那会做什么?我尝试用它代替我的代码,但没有改变。卖家名称的文本而不是图像仍然只是空白。
【解决方案3】:

想通了:

foreach($html->find('div.resultsset 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)->getAttribute('alt') <> '') {
$item['SoldBy'] = $article->find('img', 0)->getAttribute('alt'); }
else {$item['SoldBy'] = $article->find('ul.sellerInformation li a b', 0)->plaintext;}
$ret[] = $item; 
 }
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多