【php】phpでスクレイピング
問題
phpでスクレイピングってどうやるんですか?
答え
要するにこれだけ。
PHP
<?php //WebページにアクセスしてHTMLを取得する $html = file_get_contents('http://www.tenki.jp/'); //正規表現で欲しい部分だけ抽出 preg_match_all('|<td class="name_entry"><a href=".*?">(.*?)</a></td>.*?<td class="weather_telop_entry"><span.*?>(.*?)</span></td>.*?<td class="temp_entry"><span.*?>(.*?)</span>℃</td>|s', $html, $m); //結果確認 var_dump($m[1], $m[2], $m[3]);
結果
各地の地名と天気と気温
array(12) { [0]=> string(12) "東京都心" [1]=> string(6) "大阪" [2]=> string(6) "札幌" [3]=> string(6) "仙台" [4]=> string(6) "新潟" [5]=> string(6) "金沢" [6]=> string(9) "名古屋" [7]=> string(6) "広島" [8]=> string(6) "高知" [9]=> string(6) "福岡" [10]=> string(9) "鹿児島" [11]=> string(6) "那覇" } array(12) { [0]=> string(6) "晴れ" [1]=> string(6) "曇り" [2]=> string(6) "曇り" [3]=> string(6) "曇り" [4]=> string(6) "曇り" [5]=> string(6) "曇り" [6]=> string(6) "曇り" [7]=> string(12) "にわか雨" [8]=> string(6) "曇り" [9]=> string(3) "雨" [10]=> string(3) "雨" [11]=> string(6) "曇り" } array(12) { [0]=> string(3) "8.5" [1]=> string(4) "12.8" [2]=> string(3) "5.6" [3]=> string(3) "4.8" [4]=> string(3) "6.4" [5]=> string(3) "8.8" [6]=> string(4) "10.3" [7]=> string(4) "10.4" [8]=> string(4) "12.1" [9]=> string(4) "14.1" [10]=> string(4) "17.5" [11]=> string(4) "23.1" }
phpで、Webサイトにアクセスして、HTMLを取得して、解析して、欲しい部分を取り出せれば目的は達成される。
一般的なWebページは、APIとして提供されているわけではないので、予告なしにリニューアルしたり、HTMLが変わったり、URLが変わったり、アクセスしすぎたらブロックされたり、様々な問題が想定されるが、しかたないこととして割り切るのがよい。
対策としては、失敗したときや変化があったときになるべく早く気付ける仕掛けを入れておくことや、Webサイト運営者と仲良くなっておくことなど。
コメント