88617
Pythonで下記のURLをスクレイピングしたいです。

スクレイピングしたいテーブルのURL  
[空港情報](https://www.narita-
airport.jp/jp/flight/today?DepArr=D&flightDate=20220502&display=all&International=ON)

pandasを使うと簡単にテーブルをスクレイピングできる方法で行っています。

参考ページ  
[BeautifulSoupでテーブルスクレイピング](https://qiita.com/go_honn/items/ec96c2246229e4ee2ea6)

ただ"urllib.error.HTTPError: HTTP Error 403: Forbidden"のエラーが表示されので、  
別のWEBページを読み込むコードを入れています。  
その影響でpandasにて上手くスクレイピングできないです。

dfsにhtmlの変数を入れると” **ValueError** "が表示されます。  
URLの代入方法は間違えていますでしょうか。

もし分かる方がいましたら、お手数ですが教えていただけると幸いです。

```

    dfs = pd.read_html(html)
    
```

**エラー内容**

```

    ValueError: No tables found
    
```

全体コード

```

    import pandas as pd
    import urllib.request
    
    #url指定
    url = 'https://www.narita-airport.jp/jp/flight/today?DepArr=D&flightDate=20220502&display=all&International=ON'
    
    #参考:Python3でwebスクレイピングしたいのですが存在するURLが開けません。
    #https://ja.stackoverflow.com/questions/27922/
    
    headers = {
            "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
            }
    
    request = urllib.request.Request(url=url, headers=headers)
    response = urllib.request.urlopen(request)
    html = response.read().decode('utf-8')
    print(html)
    
    
    #参考：https://qiita.com/go_honn/items/ec96c2246229e4ee2ea6
    #webページに複数のテーブルがある場合、リスト形式でdfsに格納されます
    dfs = pd.read_html(html)
    a=dfs[1] 
    
    #Table print
    print(a)
    
```
CC BY-SA 4.0
2022-05-02T05:06:17.433
88610
2022-05-02T08:45:47.073
18859
question
python python3
BeautifulSoupでテーブルスクレイピング方法について
API を利用する場合。

```

    import pandas as pd
    import urllib.request
    
    url = 'https://www.narita-airport.jp/jp/api/flight/?DepArr=D&flightDate=20220502&flightDate=20220502&flightDate=20220502&display=all&International=ON'
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0',
        'X-Requested-With': 'XMLHttpRequest',
    }
    
    request = urllib.request.Request(url=url, headers=headers)
    response = urllib.request.urlopen(request)
    html = response.read().decode('utf-8')
    
    dfs = pd.read_html(html)
    a = dfs[0].droplevel([0, 1, 3], axis=1).fillna('')
    
    print(a[:10].to_markdown(index=False))
    
```

※ 先頭10行のみ表示

定刻 | 時刻変更 | 目的地 | 経由 | 便名・航空会社 | 便名・航空会社 | ターミナル | カウンター | ゲート | 機種情報 | 状況 |
所要時間  
---|---|---|---|---|---|---|---|---|---|---|---  
8:55 |  | ホーチミンシティ |  | VJ823 | ベトジェットエア | T2 | R | 96 | A21N | 出発済 | 6時間00分  
9:00 |  | ソウル |  | OZ107 NH6977 | アシアナ航空○ ANA | T1-南 | H |  |  | 欠航 | 2時間30分  
9:05 |  | 北京首都//ペキンシュト |  | NH957 | ANA | T1-南 | BC | 32 | B789 | 欠航 |  
9:15 | [9:13] | 深圳//シェンツェン |  | NH931 | ANA | T1-南 | BC | 36 | B789 | 出発済 |
4時間50分  
9:30 | [9:28] | マニラ |  | PR431 NH5335 | フィリピン航空○ ANA | T2 | Q | 93 | A321 |
出発済 | 5時間05分  
9:30 | [9:27] | ハノイ |  | VJ933 | ベトジェットエア | T2 | R | 94 | A21N | 出発済 | 5時間35分  
10:20 | [10:23] | クアラルンプール |  | MH71 FY7047 JL7093 | マレーシア航空○ ファイアーフライ 日本航空 |
T2 | I | 73 | A333 | 出発済 | 7時間25分  
10:30 |  | パリ |  | AF275 KL2295 | エールフランス○ KLM | T1-北 | C |  |  | 欠航 | 12時間40分  
10:30 | [10:27] | メルボルン |  | JL8773 | 日本航空 | T2 | L M O P | 64 | B788 | 出発済 |
10時間25分  
10:30 | [10:27] | カトマンズ |  | RA434 | ネパール航空 | T2 | Q | 95 | A332 | 出発済 |
CC BY-SA 4.0
2022-05-02T08:45:47.073
88617
2022-05-02T08:45:47.073
47127
88610
answer