2011-07-28 89 views
0

我有一个表格,其列数可以改变,取决于报废页面的配置(我无法控制它)。我只想从列标题指定的特定列中获取信息。需要帮助的网页抓取 - 获取特定的内容...

下面是一个简化的表:

<table> 
<tbody> 
<tr class='header'> 
    <td>Image</td> 
    <td>Name</td> 
    <td>Time</td> 
</tr> 
<tr> 
    <td><img src='someimage.png' /></td> 
    <td>Name 1</td> 
    <td>13:02</td> 
</tr> 
<tr> 
    <td><img src='someimage.png' /></td> 
    <td>Name 2</td> 
    <td>13:43</td> 
</tr> 
<tr> 
    <td><img src='someimage.png' /></td> 
    <td>Name 3</td> 
    <td>14:53</td> 
</tr> 
</tbody> 
</table> 

我想只提取名称(栏2)表中的。但是,如前所述,列顺序不可知。图像列可能不在那里,例如,在这种情况下,我想要的列将是第一个。

我想知道是否有任何方法可以用DomDocument/DomXPath来做到这一点。也许在第一个tr中搜索字符串“Name”,并找出它是哪个列索引,然后用它来获取信息。不太优雅的解决方案是查看第一列是否有img标记,在这种情况下,图像列是第一个,所以我们可以用这种方式抛出并使用下一个。

一直在看它约一个半小时,但我不熟悉DomDocument的功能和操作。这个有很多麻烦。

回答

0

Simple HTML DOM Parser可能是有用的。你可以查看手册。基本上你应该使用类似的东西;

$url = "file url"; 
$html = file_get_html($url); 
$header = $html->find('tr.header td'); 
$i = 0; 
foreach ($header as $element){ 
if ($element->innerText == 'Image') { $num = $i; } 
$i++; 
} 

我们发现哪列($ num)是图像列。您可以添加额外的代码来改进。 PS:寻找所有图像源的简单方法;

$images = $html->find('tr td img'); 
foreach ($images as $image){ 
$imageUrl[] = $image->src; 
} 
+0

宁愿使用PHP的DOMDocument,如果可能的话,考虑到我已经在同一个应用程序中使用它的其他东西。 =) – Ryan

+0

即使这不是我正在寻找的东西,你指出我在正确的方向。为此,我将答案给予你。 =) – Ryan

+0

谢谢@Ryan。我查看了DomDocument的文档,在这种情况下,似乎需要更多的努力去做你想做的事情。 – Turcia