<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)存储到单独的数据库字段中。