简单的HTML DOM返回NULL

时间:2014-01-31 19:39:20

标签: php web-scraping simple-html-dom

我正在使用Simple HTML DOM解析器(http://simplehtmldom.sourceforge.net/

从网站上抓取数据

HTML是:

<tr class="productListing-odd">
    <td align="right" class="productListing-data">&nbsp;0&nbsp;</td>
    <td class="productListing-data">&nbsp;<a href="http://www.spellvault.net/p46563/Liliana-of-the-Veil/product_info.html" onmouseout="hd()" onmouseover="sd('images/101257121.jpg')">Liliana of the Veil</a>&nbsp;<br>    </td>
    <td align="center" class="productListing-data">&nbsp;Black&nbsp;</td>
    <td align="center" class="productListing-data">&nbsp;Mythic&nbsp;</td>
    <td align="center" class="productListing-data">&nbsp;Innistrad&nbsp;</td>
    <td align="right" class="productListing-data">€42,50&nbsp;</td>
    <td align="center" class="productListing-data"><input type="text" name="var[46563]" value="" size="4">&nbsp;    <span class="nowrap"><span class="template-button-left">&nbsp;</span><span class="template-button-middle"><input class="submitButton" type="submit" value="Bestel"></span><span class="template-button-right">&nbsp;</span></span>&nbsp;</td>
  </tr>

和php:

include_once('simple_html_dom.php');

$html = file_get_html('-the url of the search query on the website-');

$array = array();
foreach($html->find('.productListing-odd, .productListing-even') as $element) {
    $row = array(
        'name' => strip_tags($element->childNodes(1)->innertext),
        'set' => strip_tags($element->childNodes(4)->innertext),
        'price' => strip_tags($element->childNodes(5)->innertext),
        'stock' => strip_tags($element->childNodes(0)->innertext)
    );
    array_push($array, $row);
}
echo json_encode($array);

由于某种原因,'price'的值不断返回NULL。正确收集所有其他值。我无法弄清楚为什么会发生这种情况,因为这些元素似乎都具有相同的结构。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您解析的HTML很可能具有非unicode字符集。这是一个问题,因为json_encode()仅适用于UTF-8编码。 您解析的几乎所有数据都具有ASCII字符,因此不会导致任何问题。但价格数据(第6列)包含非{ASCII}字符'€',json_encode()失败(并返回null)。