PHP从未格式化的网站获取数据

时间:2015-11-17 17:03:36

标签: php

我必须创建将从网站提取数据的应用程序,但网站未格式化,我不知道从哪里开始。您能否告诉我如何从网站提取名称地址等数据?数据在表中,没有任何ID和东西。

我从这段代码开始:

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>

1 个答案:

答案 0 :(得分: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;
}

循环中打印的第一个值没有语义,第二个值似乎是分母,第三个值是相应的值,然后您可以处理它们。

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