我正在使用Simple HTML DOM解析器(http://simplehtmldom.sourceforge.net/)
从网站上抓取数据HTML是:
<tr class="productListing-odd">
<td align="right" class="productListing-data"> 0 </td>
<td class="productListing-data"> <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> <br> </td>
<td align="center" class="productListing-data"> Black </td>
<td align="center" class="productListing-data"> Mythic </td>
<td align="center" class="productListing-data"> Innistrad </td>
<td align="right" class="productListing-data">€42,50 </td>
<td align="center" class="productListing-data"><input type="text" name="var[46563]" value="" size="4"> <span class="nowrap"><span class="template-button-left"> </span><span class="template-button-middle"><input class="submitButton" type="submit" value="Bestel"></span><span class="template-button-right"> </span></span> </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。正确收集所有其他值。我无法弄清楚为什么会发生这种情况,因为这些元素似乎都具有相同的结构。
提前致谢!
答案 0 :(得分:2)
您解析的HTML很可能具有非unicode字符集。这是一个问题,因为json_encode()
仅适用于UTF-8编码。
您解析的几乎所有数据都具有ASCII字符,因此不会导致任何问题。但价格数据(第6列)包含非{ASCII}字符'€',json_encode()
失败(并返回null)。