0

PHP を使用して別の Web サイトからスクレイピングしたテーブルからデータを解析する必要があります。テーブルは次のようになります。

<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 を保持します。残りのすべてのテーブル行には、解析する必要がある情報が保持されています。今、私はしばらくこれに苦労しており、このウェブサイトで答えを見つけて少し助けになりましたが、私のテーブルにはIDがありませんが、tdとth idを使用してテーブルを読み取りますテーブル行または td です。私は cURL を使用して、このテーブルの HTML を他の Web サイトから取得し、それを通過させて、次のように 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);

ここまではよかった。しかし、今ではコードの一部が来て、それを機能させる方法がわかりません。このスレッドからコードをコピーして編集した日付を読み取るには: ( How to parse this table and extract data from it? ) しかし、私はそれを機能させることができません。

// 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] => 2013 年 11 月 11 日 [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 に答える