如何在使用DOM抓取网页表时获取具体信息?

时间:2013-08-26 12:55:57

标签: php html dom simple-html-dom

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

样本表:

<table>
    <tr>
        <td>Name</td>
        <td>Age</td>
        <td>Marks</td>
    </tr>
    <tr>
        <td>A</td>
        <td>20</td>
        <td>90</td>
    </tr>
    <tr>
        <td>B</td>
        <td>21</td>
        <td>80</td>
    </tr>
    <tr>
        <td>C</td>
        <td>22</td>
        <td>70</td>
    </tr>
</table>

我的PHP代码显示所有列:

foreach($html->find("table#table2 tr td") as $td) {
  $code = $td;
  echo $code;
}

需要的代码格式:

foreach($html->find('table#table2 td') as $td) {
  /* Get td1 data */ 
  /* Code1 to store td data 1 */

  /* Get next td data */ 
  /* Code2 to store td data 2 */

  /* Get the next td data */ 
  /* Code3 to store td data 3 */
}

我想提取输出并将其存储到具有相应列中的表名结果的DB表中。

我可以自己编写存储代码。 我需要一个代码来检索一行中没有循环的连续td数据。因为存储td数据的代码会有所不同。

我提到的帖子 - scraping webpage

2 个答案:

答案 0 :(得分:1)

// Create DOM from URL or file
$html = file_get_html("http://www.example.org/");

// Find the tr array
$tr_array = $html->find("table#table2 tr");

$td_array = [];
// Find the td array
foreach($tr_array as $tr) {
    array_push($td_array,$tr->find("td"));
}

echo "<table id=\"table1\">";
foreach($tr_array as $tr) {
    echo "<tr>";
    foreach($td_array as $td) {
        echo $td;
    }
    echo "</tr>";
}
echo "</table>";

有关高级主题,请阅读simplehtmldom


在上面的代码中,我将数组对象存储在数组中:

<?php

$a = [];
$a1 = [1,2,3];
$a2 = [4,5,6];
array_push($a,$a1,$a2);
foreach($a as $a_e) {
  foreach($a_e as $e) {
    echo $e;
  }
  echo "<br>";
}

?>

输出:

  

123
456

答案 1 :(得分:0)

获取特定表格中的所有td

//get into specific table. table number is from 0,1,2,3.. in your whole html returned
$table = $html->find('table', tableNumber);
$td = $html->find('td');
foreach($td as $tds)
{
  echo $tds;
}