2015-11-17 35 views
0

我必須製作將從網站中提取數據的應用程序,但網站未格式化,我不知道從哪裏開始。你能告訴我任何想法如何從網站提取名稱地址等數據?數據在表格中,沒有id和東西。PHP從未格式化的網站獲取數據

我開始使用此代碼:

function get_url_contents($url){ 
     $crl = curl_init(); 
     $timeout = 5; 
     curl_setopt ($crl, CURLOPT_URL,$url); 
     curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $ret = curl_exec($crl); 
     curl_close($crl); 
     return $ret; 
} 

$result = get_url_contents("***********"); 
$result = str_replace("<","&lt;", $result); 
$result = str_replace(">","&gt;", $result); 

echo nl2br($result); 

所以我得到不錯的網站代碼,但不知道如何繼續。

代碼是這樣的:

<td> 
      <h4 class="normal"><strong>Základní identifikační údaje</strong></h4> 
     </td> 
    </tr> 


    <tr> 
     <td> 
     <div class="dkLeftLine"></div> 
     </td> 
     <td> 
     Name: 
     </td> 
     <td> 
     <b>Mo******</b> 
     </td> 
    </tr> 

    <tr> 
     <td> 
     <div class="dkLeftLine"></div> 
     </td> 
     <td> 
     VAT: 
     </td> 
     <td> 


      &nbsp;&nbsp; 
      <a href="****"> 
       (******) 
      </a> 

     </td> 
    </tr> 
    <tr> 
     <td> 
     <div class="dkLeftLine"></div> 
     </td> 
     <td> 
     Rodné číslo/Datum nar.: 
     </td> 
     <td> 
     *****/****/**.**.**** 
     </td> 
    </tr> 
    <tr> 
     <td > 
      <div class="dkLeftLine"></div> 
     </td> 
     <td > 
      Bydliště: 
     </td> 
     <td> 

      ****, ** ****** ***, *** *** ** 
     </td> 
    </tr> 
+0

但網站未格式化?你什麼意思? –

+0

它是一個簡單的文本文件嗎?你怎麼知道什麼是名字或地址?注意:最後兩行可以替換爲'$ result = str_replace(array('>','<'),array('>','<'),$ result);' –

+0

我的意思是說沒有ID和東西的HTML網站。我不知道如何提取我想要的JUST文本。 – Slouchy

回答

1

Webscraping往往不夠結構化數據的交易。即使使用例如結構良好的來源微格式不需要可靠,例如,用戶在姓氏字段中輸入他們的名字。

你的樣品似乎結構足以讓至少一些數據:

$dom = new DOMDocument('1.0', 'utf-8'); 
$dom->loadHTML($markup); 

$xpath = new \DOMXpath($dom); 
$elements = $xpath->query('//tr/td'); 

foreach ($elements as $element) { 
    print trim($element->nodeValue) . PHP_EOL; 
} 

在循環印刷不具有語義的第一個值,第二似乎是分母,第三是相應的值,然後你可以處理。

請注意,這只是一個示例,您必須增強路徑查詢。