2015-11-17 99 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; 
} 

在循环印刷不具有语义的第一个值,第二似乎是分母,第三是相应的值,然后你可以处理。

请注意,这只是一个示例,您必须增强路径查询。