PHP解析 - 使用strpos()和substr()来选择特定数据

时间:2017-04-20 09:13:43

标签: php parsing xml-parsing html-parsing

<tr class=" odd">

<td class="pos">DATA 1</td>
<td><a href="..." target="_top">DATA 2</a></td>
<td>DATA 3</td>
<td><a href="...">DATA 4</a></td>
<td>DATA 5</td>
<td>DATA 6</td>
<td>DATA 7</td>
<td><a href="...">DATA 8</a></td>
<td>DATA 9</td>
<td>DATA 10</td>
<td style="min-width:48px"><a href="...">
<img alt="..." src="..." style="padding-right: 4px; height: 20px; width: 20px">
</a></td>

</tr>

我正在查看上面的代码。此代码显示一行数据,我正在查看此格式的大约7500行数据。我想选择特定的数据列,我主要需要DATA 2,DATA 3,DATA 6和DATA 7。

我已经制作了抓取DATA 2和DATA 3的代码并将它们存储在一个正常运行的数组中。代码如下:

$array_data2 = array(); 
$array_data3 = array(); 
$array_data6 = array();

while(FALSE != $data2_pos = strpos($output, "_top",$pos + 1)) {
        $pos2 = substr($output, $data2_pos+6);     
        $pos3 = strpos($pos2, "</a>");
        $data2= substr($pos2, 0, $pos3);
        $data2=ltrim ($data2);       
        $data2=rtrim ($data2);
        $array_data2[ ] = $data2;

        $data3_pos=strpos($output,"<td>", $pos);
        $pos22 = substr($output, $data3_pos+4);     
        $pos33 = strpos($pos22, "</td>");
        $data3= substr($pos22, 0, $pos33);
        $data3=ltrim ($data3);       
        $data3=rtrim ($data3);
        $array_data3[ ] = $data3;
}

我正在寻找选择DATA 6的解决方案。上面的代码适用于DATA 2,因为它查找target="_top",而对于DATA 3,它查找第一个表<td>标记。似乎没有任何代码可以将DATA 6与其他数据列区分开来。

我尝试过的一种方法是使用固定数量的字符,如下所示:

        $data6_pos=strpos($output,"<td>",$pos);
        $pos222 = substr($output, $data6_pos+100);     
        $pos333 = strpos($pos222, "</td>");
        $data6= substr($pos222, 0, $pos333);
        $data6=ltrim ($data6);       
        $data6=rtrim ($data6);
        $array_data6[ ] = $data6;

这样做的缺点是DATA 6在第一个<td>标记位置后并不总是100个字符。

我非常感谢任何关于分离这些数据部分的想法。非常感谢!

根据评论,我开始使用DOM作为下面的代码:

$dom = new DOMDocument;
$dom->loadHTML($output);
foreach ($dom->getElementsByTagName('tr') as $node) {
echo $node->nodeValue; 
echo '<br>';
}

这是更短的代码,每次有新的<tr>表标记时,都会以新行显示值: DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7 DATA 7 DATA 9 DATA 10 DATA 10

我现在将研究如何获取此数据的单独部分,以将各个列(如DATA 2和DATA 3)存储到单独的数据库字段中。

0 个答案:

没有答案