屏幕使用PHP抓取两列表

时间:2013-10-15 19:44:45

标签: php dom simple-html-dom screen-scraping

听起来很简单,但我是整个屏幕报废的新手。我所拥有的是一个远程站点http://www.remotesite.com(例如用途),它具有一个具有如下结构的调度表:

<table>
  <tr>
    <td class="team">
      Team 1
    </td>
    <td class="team">
      Team 2
    </td>
  </tr>
</table>

该表格填充了一系列动态条目,具体取决于当天Team 1与Team 2等游戏的数量。

我已经构建了我的剪贴板以获取表中列出的所有团队的列表,并且它可以成功运行。这是代码:

<?php
// Load Simple DOM
    include_once("simple_html_dom.php");

// Scrape the Schedule
    libxml_use_internal_errors(true);
    $dom = new DOMDocument();
    $html = file_get_html("http://www.remotesite.com/schedule.htm");

    // Load HTML
        $dom->loadHTML($html);
        $xpath = new DOMXPath($dom);

    // Get all the Teams
        $my_xpath_query = "//table//td[contains(@class, 'team')]";
        $result_rows = $xpath->query($my_xpath_query);

&GT;

为了回应这个问题我有这个代码:

<?php
    // Display the schedule
        foreach ($result_rows as $result_object){
            echo $result_object->nodeValue;
        }
?>

然而,这样做的结果就像这样的团队:

Team1Team2Team3Team4Team5Team6 etc, etc.

正在以正确的顺序让正在互相对战的队伍成对,但我需要做的就是以与我拿到它相同的方式回应表格。

提前感谢你们给我的任何帮助!

1 个答案:

答案 0 :(得分:0)

根据你对我的问题的回答,我建议你做这样的事情:

$rows = '';
$teams = array();

// Pull team names into array
foreach ($result_rows as $result_object){
   $teams[] = $result_object->nodeValue;
}

// Extract two teams per table row
while(count($teams)){
   $matchup = array_splice($teams, 0, 2);
   $rows .= '<tr><td>'.implode('</td><td>', $matchup).'</td></tr>';
}

// Write out the table
echo "<table>$rows</table>';