我必须创建将从网站提取数据的应用程序,但网站未格式化,我不知道从哪里开始。您能否告诉我如何从网站提取名称地址等数据?数据在表中,没有任何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("<","<", $result);
$result = str_replace(">",">", $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>
<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 :(得分: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;
}
循环中打印的第一个值没有语义,第二个值似乎是分母,第三个值是相应的值,然后您可以处理它们。
请注意,这只是一个示例,您必须增强路径查询。