phpの正規表現マッチ(preg_match)でtableをスクレイピングする。
プラグインを入れるのが面倒だったりする場合、サクッとpreg_matchでtableデータをスクレイピングしてみるメモ。 時間なくてほんとメモ程度のものです。
HTMLはこちら
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>HTML5サンプル</title>
</head>
<body>
<table class="table table-bordered datatable">
<thead>
<tr>
<th>DATE</th>
<th>IMP</th>
<th>CLICK</th>
<th>CTR</th>
<th>PROFIT</th>
<th>CPM</th>
<th>CPC</th>
</tr>
</thead>
<tbody>
<tr class="color_fri">
<td>2019-02-01</td>
<td>13,305</td>
<td>205</td>
<td>1.54</td>
<td>1,459.0</td>
<td>118.4</td>
<td>7.7 </td>
</tr>
<tr class="color_sat">
<td>2019-02-02</td>
<td>12,707</td>
<td>241</td>
<td>1.90</td>
<td>1,518.0</td>
<td>129.0</td>
<td>6.8 </td>
</tr>
<tr class="color_sun">
<td>2019-02-03</td>
<td>6,915</td>
<td>136</td>
<td>1.97</td>
<td>866.0</td>
<td>135.3</td>
<td>6.9 </td>
</tr>
<tr class="color_mon">
<td>2019-02-04</td>
<td>8,043</td>
<td>162</td>
<td>2.01</td>
<td>1,005.0</td>
<td>135.0</td>
<td>6.7 </td>
</tr>
<tr class="color_tue">
<td>2019-02-05</td>
<td>8,179</td>
<td>161</td>
<td>1.97</td>
<td>1,002.0</td>
<td>132.3</td>
<td>6.7 </td>
</tr>
</tbody>
</table>
</body>
</html>
# 上記HTMLを何かしらで取得する $data = file_get_contents('./x.html'); preg_match('#<table[^>]*>(?<data>.*?)</table[^>]*>#s', $data, $m); preg_match_all('#<tr[^>]*>(?<data>.*?)</tr[^>]*>#s', $m['data'], $m); foreach ($m['data'] as $k => $tr) { preg_match_all('#<td[^>]*>(?<data>.*?)</td>#is', $tr, $m); } var_dump($m);