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


Need help scraping webpage -- getting specific content...

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

下面是一个简化的表格:

<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标记,在这种情况下,图像列是第一列,因此我们可以抛弃这种方式并使用下一个。

已经看了大约一个半小时了,但是我对DomDocument函数和操作不熟悉。这个有很多问题

简单的HTML DOM解析器可能有用。您可以查看手册。基本上你应该使用;

$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;
}