0

我需要从使用 PHP 从不同网站抓取的表中解析数据。该表如下所示:

<table id="IWGRD" border="1" cellpadding="0" cellspacing="0" width="409"    bordercolor="#FFFFFF" bordercolorlight="#FFFFFF" bordercolordark="#FFFFFF" class="IWGRDCSS" style="width:409;height:10;z-index:100;font-style:normal;font-size:10pt;text-decoration:none;">
<tbody>
<tr>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Dag&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Datum&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Lesuur&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Lokaal&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Docent(en)&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Vak&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Groep(en)&nbsp;</b></font>
</td>
<td valign="middle" align="left" nowrap="" bgcolor="#A0A0A0">
<font style="font-size:10pt;"><b>&nbsp;Toelichting&nbsp;</b></font>
</td>
</tr>
<tr>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;Di&nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;12-11-2013&nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;5 - 6&nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;B2.33&nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;LKH02&nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;SWSP14SLB1V13_SWSP15PRA1V13&nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;MAV1SP10 &nbsp;</font>
</td>
<td valign="middle" align="left" nowrap="">
<font style="font-size:10pt;">&nbsp;SLB major 1 / praktijkleren&nbsp;</font>
</td>
</tr>

此表由 javascript 生成。在此表中,第一个 tr 包含所有包含标题的 td。而所有其余的表行都包含我需要解析的信息。现在我已经为此苦苦挣扎了一段时间,我在这个网站上找到了一个答案,这对我有所帮助,但是它通过使用 td 和 th id 来读取表格,而我的表格上没有 id表行或 td。我正在使用 cURL 从其他网站获取此表格 HTML 并将其传递并加载到 DOM 中,如下所示:

<?php
include_once('/simple_dom/simple_html_dom.php');
//step1
$cSession = curl_init(); 
//step2
$tmpfname = dirname(__FILE__).'/cookie.txt';
curl_setopt($cSession, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($cSession, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($cSession,CURLOPT_URL,"http://anonymusurlbecauseofprivacyreasons?somegetters");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($cSession,CURLOPT_HEADER, false); 
curl_setopt ($cSession, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($cSession, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
curl_setopt($cSession,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

$result=curl_exec($cSession);
if ($result === FALSE) {  

echo "cURL Error: " . curl_error($ch);  

}  
curl_close($cSession);
// create empty document 
$dom = new DomDocument;
@$dom->loadHtml($result);
$xpath = new DomXPath($dom);

好的,到目前为止,很好。但现在是我无法弄清楚如何让它工作的代码部分。要读出我从该线程复制和编辑代码的日期:(如何解析此表并从中提取数据?)但我无法使其正常工作。

// collect data
foreach ($xpath->query('//table[@id="IWGRD"]/tr') as $node) {
$rowData = array();
foreach ($xpath->query('td', $node) as $cell) {
    $rowcleaned = str_replace("\xc2\xa0","", $cell->textContent);
    $rowData[] = $rowcleaned;
}
}
print_r($rowData);

这给了我以下输出: Array ( [0] => [1] => [2] => 7 - 8 [3] => S0.20 [4] => SPHdeBruin [5] => SWSP17KBOOV13 [6] => MAV1SP09,MAV1SP10 [7] => Bewegingsagogiek )

这是最后一行的正确输出,但我需要所有行。所以我需要的输出类型是所有行(我只不需要最上面的行)
所以就像
array[1] = ([0] => Mon [1] => 11-11-2013 [2 ] => 7 - 8 [3] => S0.20 [4] => SPHdeBruin [5] => SWSP17KBOOV13 [6] => MAV1SP09,MAV1SP10 [7] => Bewegingsagogiek)

数组[2] = ([0] => 星期一 [1] => 11-11-2013 [2] => 8 - 9 [3] => S0.20 [4] => 名称 [5] => SWSP17KBOOV13 [6] => MAV1SP09,MAV1SP10 [7] => randomresult)
所以我可以使用信息并将其放入变量中以将其传递给应用程序。

任何人都知道如何做到这一点?我已经为此工作了几个小时,因为我没有任何使用 cUrl 或 DOM 的经验。任何帮助深表感谢!:)

4

1 回答 1

1

看起来你并没有收集每一行......

$tableData = array();

foreach ($xpath->query('//table[@id="IWGRD"]/tr') as $node) {
  $rowData = array();
  foreach ($xpath->query('td', $node) as $cell) {
      $rowcleaned = str_replace("\xc2\xa0","", $cell->textContent);
      $rowData[] = $rowcleaned;
  }
  $tableData[] = $rowData;
}

print_r($tableData);
于 2013-11-12T15:30:29.647 回答