我正在使用DOM / Xpath解析一些HTML,其最终目标是生成一个.CSV文件,其中包含我用查询抓取的数据。
以下当前代码有效,但仅返回上一个产品名称。我知道我在这里的有点,但是我已经达到最大限度,无法弄清楚这一点。非常感谢任何帮助。感谢。
$names = array();
$result = $xpath->query("//div[@class='product-name']");
foreach ($result as $nam) {
$names[] = $nam->nodeValue;
$i = 0;
$values=$names[$i] = $nam->nodeValue;
}
$list = array (
array('Product Name','Stock Level','Price'),
array($values, '456', '789'),
);
$fp = fopen('product-sheet.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
答案 0 :(得分:1)
问题是你在循环中设置$ i。
foreach ($result as $nam) {
$names[] = $nam->nodeValue;
$i = 0;
$values=$names[$i] = $nam->nodeValue;
}
在每次迭代中,$ i被重置为0.尝试这样的事情:
for($i=0; $i< count($result); $i++) {
$names[] = $result->nodeValue;
$values=$names[$i] = $result->nodeValue;
}
答案 1 :(得分:1)
我不完全确定你想要达到的目标,但希望这会让你更接近你的目标。
<?php
//mocked up input, substitute for your HTML source
$input = "<html>
<div class='product-name'>test1</div>
<div class='product-name'>test2</div>
<div class='product-name'>test3</div>
<div class='product-name'>test4</div>
<div class='product-name'>test5</div>
</html>";
$doc = new DOMDocument();
@$doc->loadHTML($input);
libxml_use_internal_errors(FALSE);
$xpath = new DomXPath($doc);
$list = array (
array('Product Name','Stock Level','Price')
);
$result = $xpath->query("//div[@class='product-name']");
foreach ($result as $nam) {
$value = $nam->nodeValue;
$list[] = array($value, '456', '789'); //Appends an array to the lists array
}
$fp = fopen('product-sheet.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>