我有一个PHP代码,它将csv文件读取并解析为多行数组,我接下来需要做的是采用这个数组,让simplehtmldom触发一个爬虫返回一些公司股票信息。
CSV解析器的php代码是
$arrCSV = array();
// Opening up the CSV file
if (($handle = fopen("NASDAQ.csv", "r")) !==FALSE) {
// Set the parent array key to 0
$key = 0;
// While there is data available loop through unlimited times (0) using separator (,)
while (($data = fgetcsv($handle, 0, ",")) !==FALSE) {
// Count the total keys in each row $data is the variable for each line of the array
$c = count($data);
//Populate the array
for ($x=0;$x<$c;$x++) {
$arrCSV[$key][$x] = $data[$x];
}
$key++;
} // end while
// Close the CSV file
fclose($handle);
} // end if
echo "<pre>";
echo print_r($arrCSV);
echo "</pre>";
这很好用并逐行解析数组,$ data是每行的变量。我现在需要做的是通过simplehtmldom读取它,这是它崩溃的地方,我正在使用这个代码或类似的东西,我很缺乏经验,但我想我需要一个foreach声明在某处这条线。
这是simplehtmldom代码
$html = file_get_html($data);
$html->find('div[class="detailsDataContainerLt"]');
$tickerdetails = ("$es[0]");
$FileHandle2 = fopen($data, 'w') or die("can't open file");
fwrite($FileHandle2, $tickerdetails);
fclose($FileHandle2);
fclose($handle);
所以我的问题是如何让他们两个一起工作,我多次检查simplehtmldom手册页并在这个区域发现它有点模糊,上面的simplehtmldom代码是我在另一个函数中使用但是通过direclty链接所以我知道它有效。
问候 马丁
答案 0 :(得分:0)
您的循环可以缩减为(是的,它是相同的):
while ($data = fgetcsv($handle, 0, ',')) {
$arrCSV[] = $data;
}
使用SimpleXML
代替SimpleDom(因为它是标准的PHP):
foreach ($arrCSV as $row) {
$xml = simplexml_load_file($row[0]); // Change 0 to the index of the url
$result = $xml->xpath('//div[contains(concat(" ", @class, " "), " detailsDataContainerLt")]');
if ($result->length > 0) {
$file = fopen($row[1], '2'); // Change 1 to the filename you want to write to
if ($file) {
fwrite($file, (string) $result->item(0));
fclose($file);
}
}
}
如果我理解正确,应该这样做......