Help us understand the problem. What is going on with this article?

Goutteで空港情報を取得してみる

はじめに

友達との作品制作で空港の情報が欲しくなった時にスクレイピングしてみようと思い

下記のサイトさんがたくさんの情報が載っていたのでスクレイピングしようと思いました。
https://www.airlineguide.jp/airport-codes/

PHPやLaravelは初心者でいろんな方の記事を参考にさせていただきました

Laravel/Goutteで映画タイトルをクローリングする

Goutte(PHP)でスクレイピングしてみる

利用するものとしては友人がLaravelを使用していたのでそれに合わせました

※スクレイピングについては色々あると思うので自己責任でお願いします。

スクレイピングとは

スクレイピングはサーバサイドのプログラミング言語を使って外部サーバへアクセスし、そのコンテンツから自分たちの欲しい情報を引き出す手法です。多くはHTMLを返す場合に使われ、DOMを解析したり正規表現を使ってデータを抜き出します。
引用(スクレイピングとAPIの違い)

取得した情報

  • 空港コード
  • 空港名

の三つの情報が欲しいのでサイトをみてみます

スクリーンショット 2020-01-13 23.59.25.png

画像内のテーブルタグに囲まれた
- 1つ目 空港コード
- 3つ目 空港名 OR 3つ目の項目が空なら4つ目の項目を取ろうと思います

controller

AirPortController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Goutte;
use Illuminate\Support\Facades\DB;

class AirPortController extends Controller
{
    //
    public function index(){
        $url = 'https://www.airlineguide.jp/airport-codes/';

        $airCode = array();
        $count = 0;

        $crawler = Goutte::request('GET', $url);
        $crawler->filter('table tr')->each(function($node) use(&$airCode,&$count) {

            if(count($node->filter('td'))){
                //空港コード
                $airCode[$count]['code'] = $node->filter('td')->eq(0)->text();
                //空港名
                if($node->filter('td')->eq(2)->text() === ''){
                    $airCode[$count]['airPort'] = $node->filter('td')->eq(3)->text();
                }else{
                    $airCode[$count]['airPort'] = $node->filter('td')->eq(2)->text();
                }
                $count++;
            }

        });

        //DBに空港情報登録
        foreach ($airCode as  $value){
            DB::table('airports')->insert(['airport_code' => $value['code'],
                'airport_name'=> $value['airPort']]);
        }

    }
}

ルーティング

web.php
Route::get('/search','AirPortController@index');

結果

無事

  • 空港コード
  • 空港名

が取得できました

一つ空白の項目があるのは後からAPIとかで国コードを挿入するためです

スクリーンショット 2020-01-13 23.57.05.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away