国交省の水位データを使用したいと思い、phpでスクレイピングしました。
スクレイピングしたデータを最終的にCSVファイルにしたいと思ったのですが、時間データに日付も入っておりcsvファイルに出来ない状況です。
行いたい操作は、特定の文字を判別しその前後2列を違う配列に代入する。また、代入された値をその配列から削除する。
日付データと時間データを区別させたいです。
いい方法があれば教えていただきたいです。
13:00 14:00 15:00 16:00 17:00 19:00 20:00 21:00 22:00 23:00 09/11 01:00 02:00 03:00 04:00 05:00 07:00 08:00
$time_regular = preg_replace("/\r\n|\r|\n|\t|\s/","",$time);この部分はスクレイピング行うと、タブや改行もデータとして取れたので、それらがない一列のデータにしました。
text
113:0014:0015:0016:0017:0019:0020:0021:0022:0023:0009/1101:0002:0003:0004:0005:0007:0008:0009:0010:0011:0013:0014:0015:0016:0017:0019:0020:0021:0022:0023:0009/1201:0002:0003:0004:0005:0007:0008:0009:0010:00
str_split()を使用して、5つのデータに分割し配列に代入しました。
text
1array(41) { [0]=> string(5) "13:00" [1]=> string(5) "14:00" [2]=> string(5) "15:00" [3]=> string(5) "16:00" [4]=> string(5) "17:00" [5]=> string(5) "19:00" [6]=> string(5) "20:00" [7]=> string(5) "21:00" [8]=> string(5) "22:00" [9]=> string(5) "23:00" [10]=> string(5) "09/11" [11]=> string(5) "01:00" [12]=> string(5) "02:00" [13]=> string(5) "03:00" [14]=> string(5) "04:00" [15]=> string(5) "05:00" [16]=> string(5) "07:00" [17]=> string(5) "08:00" [18]=> string(5) "09:00" [19]=> string(5) "10:00" [20]=> string(5) "11:00" [21]=> string(5) "13:00" [22]=> string(5) "14:00" [23]=> string(5) "15:00" [24]=> string(5) "16:00" [25]=> string(5) "17:00" [26]=> string(5) "19:00" [27]=> string(5) "20:00" [28]=> string(5) "21:00" [29]=> string(5) "22:00" [30]=> string(5) "23:00" [31]=> string(5) "09/12" [32]=> string(5) "01:00" [33]=> string(5) "02:00" [34]=> string(5) "03:00" [35]=> string(5) "04:00" [36]=> string(5) "05:00" [37]=> string(5) "07:00" [38]=> string(5) "08:00" [39]=> string(5) "09:00" [40]=> string(5) "10:00" } string(1) " "
しかし、データ内に時間だけでなく日付データも入っておるため、 if ( strpos( $time_array[$i], '/') === false )この部分で/がある値を探して、あった場合は違う配列に入れて日付と時間を分離させようとしています。また、日付と時刻を対応させるために' 'を行っていますが、上のテキストファイルの状態になります。
php
1<?php 2 //webスクレイピング 3 require_once("./phpQuery-onefile.php"); 4 $html = file_get_contents("http://www.river.go.jp/kawabou/ipSuiiKobetu.do?obsrvId=0921700400080&gamenId=01-1003&stgGrpKind=survForeKjExpl&fldCtlParty=no&fvrt=yes"); 5 $doc = phpQuery::newDocument($html); 6 $time = $doc[".tb1td1RightNoUline"]->text(); 7 $water = $doc[".tb1td2RightNoUline"]->text(); 8 9 //正規表現 置換 10 $time_regular = preg_replace("/\\r\\n|\\r|\\n|\t|\s/","",$time); 11 $time_array = str_split($time_regular, 5); 12 $time_count = count($time_array); 13 $month = array(); 14 15 for($i=0;$i<$time_count;$i++){ 16 if ( strpos( $time_array[$i], '/') === false ){ 17 18 $month = ' '; 19 } else { 20 $month = $time_array[$i]; 21 } 22 } 23 var_dump($time_array); 24 var_dump($month); 25 // $textfile = fopen("hoge.txt","w+"); 26 // fwrite($textfile, $arrPregSplit); 27 // fclose($textfile); 28?>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/12 05:08