需要帮助抓取网页 - 获取具体内容......

时间:2011-07-28 16:46:57

标签: php parsing dom domdocument

我有一个表,其列数可以根据报废页面的配置而改变(我无法控制它)。我想只获取特定列中的信息,由列标题指定。

这是一个简化的表格:

<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列)。但是,如前所述,列顺序不可知。例如,Image列可能不存在,在这种情况下,我想要的列将是第一列。

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

看了大约一个半小时,但我对DomDocument的功能和操作并不熟悉。这个问题很麻烦。

1 个答案:

答案 0 :(得分: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)是image列。您可以添加其他代码以进行改进。

PS:查找所有图像源的简便方法;

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