PHP使用XPATH从HTML页面获取文本和Href

问题描述

这是我有关Stack的第一个问题,如果有任何不当之处,请原谅我。

我有一个网页,上面有我想提取的信息列表,其中之一也是td中的信息,但是我无法解决如何访问它的问题。

HTML示例:

<tbody>
  <tr>
   <td>
     19-10-2020 @ 17:33
   </td>
   <td class="hidden-xs hidden-sm">
    <a href="#" data-identifier="5f8db1c332ea9b22d375b7c0"></a>                                       
   </td>

这是我用来提取其他TD的PHP的示例

$xpath = new DOMXpath($document);
        
        foreach($xpath->evaluate('//table/tbody/tr') as $tr) {
    

enter code here

        
            $i = 0;
            $row = [];
            foreach ($xpath->evaluate('td',$tr) as $td) {
                if ($i == 0){
                    $row['datumtijd'] = date_format(date_create(str_replace(" @","",trim($td->nodeValue))),"Y-m-d H:i:s");
                }
                if ($i == 1){
                  print_r($td->nodeValue); //Completely empty
                }

我们非常感谢您的帮助。

解决方法

仅着重于提取数据(而不是格式化等),并假设您的html如下所示是固定的,请尝试以下方法:

 $str = '
<tbody>
  <tr>
   <td>
     19-10-2020 @ 17:33
   </td>
   <td class="hidden-xs hidden-sm">
    <a href="#" data-identifier="5f8db1c332ea9b22d375b7c0"></a>                                       
   </td>
  </tr>
</tbody>
';
$doc = new DOMDocument();
$doc->loadHTML($str);
$doc = simplexml_import_dom($doc);
$dates = $doc->xpath('//td[1]');
$identifiers = $doc->xpath('//td/a[@href]/@data-identifier');

foreach(array_combine($dates,$identifiers) as $date => $identifier) {
    echo trim($date) . "\n";
    echo trim($identifier) . "\n";
}

输出:

19-10-2020 @ 17:33
5f8db1c332ea9b22d375b7c0
,

有一种简单的方法可以使用不带xpath的php获取第n个元素:

$dom = new DOMDocument();
@$dom->loadHTML($HTML);
foreach($dom->getElementsByTagName('table') as $table) {
  echo innerHTML($table->getElementsByTagName('td')->item(ITEM_NUMBER))
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...