2014-06-17 143 views
0

我目前正在從一個網站上抓取數據。我用下面的代碼刮掉了我需要的所有數據,但是我想知道將這些數據輸出到逗號分隔的CSV文件中的最簡單方法是什麼。我原本計劃把它全部移到一張表格中,然後以這種方式導出,但我知道如果這是最有效的方法,不要這樣做。將抓取的數據導出爲CSV

<?php 

      $html = file_get_contents("http://www.zillow.com/homes/for_sale/Alamance-County-NC/2117_rid/36.181671,-78.943291,35.912411,-79.835243_rect/10_zm/1_fr/");   

      $DOM = new DOMDocument(); 
      libxml_use_internal_errors(true); 
      $DOM->loadHTML($html); 
      $finder = new DomXPath($DOM); 
      $classname = 'property-address'; 
      $nodes = $finder->query("//*[contains(@class, '$classname')]"); 

      $csv_values = array(); 
      foreach ($nodes as $node) { 
       $csv_values[] = $node->nodeValue;  
      } 
      $handle = fopen("C:\Users\Stephen\Documents\WorkCSV\work.csv", "w"); 
      if (false !== $handle) { 
       fputcsv($handle, $csv_values); 
      } 

      ?> 
+0

http://www.php.net//manual/en/function.fputcsv.php – dave

+0

@dave我看到我應該使用該命令的數組。我如何將這些對象轉換爲數組?每個對象都包含大約20個左右的值。我嘗試了$ myarray = array($ node),但它只是基於每個對象中的最後一個值而不是整個列表創建一個數組。對此有何想法? – Steve

+0

正如@dave所說,在文件路徑中雙轉義反斜槓,改爲:'$ handle = fopen(「C:\\ Users \\ Stephen \\ Documents \\ WorkCSV \\ work.csv」,「w」) ;' ' – berrberr

回答

0

我能夠使用Dave提供的代碼將我的所有數據存入數組中。另外,在fopen中我使用了反斜槓「\」,並且在切換到正斜槓「/」後,我能夠產生一個錯誤,我可以使用它來導出爲CSV。

+3

你應該在這個答案中發佈你的工作解決方案並接受它(或Dave的)。它會幫助那些面臨同樣問題的人。 – JoeBilly

0

您可以使用fputcsviterator_to_array

$nodes = $finder->query("//*[contains(@class, '$classname')]"); 
$handle = fopen("/path/to/file.csv", "w"); 
if (false !== $handle) { 
    fputcsv($handle, iterator_to_array($nodes)); 
} 

或者這樣:

$csv_values = array(); 
foreach ($nodes as $node) { 
    $csv_values[] = $node->nodeValue;  
} 
$handle = fopen("/path/to/file.csv", "w"); 
if (false !== $handle) { 
    fputcsv($handle, $csv_values); 
} 

在Windows平臺上,要小心逃跑路徑使用文件的任何反斜線,或者使用正斜槓。

$handle = fopen("c:\\folder\\file.csv", "r"); 
+0

第一個方法返回以下錯誤:可捕獲的致命錯誤:DOMElement類的對象無法轉換爲74行中的/home/u314991906/public_html/scrape.php中的字符串。我將嘗試第二個現在的方式。 – Steve

+0

好,所以第二種方法似乎工作,但沒有文件正在創建。我第一次嘗試指向我的FTP路徑,然後再次到我的本地計算機。都沒有工作,但都沒有給我一個錯誤。沒有錯誤,但是也沒有文件。我編輯了我的原始代碼,以顯示我目前正在使用的代碼片段。 – Steve