今回は、Webページに掲載されている「表」からデータを取得する方法を紹介していこう。見た目が表形式になっているデータはもちろん、リストのようなデータも「Power Query エディター」に取得することが可能だ。Webページの更新にあわせて、Excelに取り込んだデータを最新状態に更新できることもパワークエリならではの利点といえる。
Webページからデータを取得する手順
ここでは、気象庁が公開している「過去の気象データ」をExcelに取り込む場合を例に、具体的な操作手順を紹介していく。まずは、取得したいデータ表が掲載されているWebページをブラウザに表示する。
以下の図は、2024年8月における東京の「日ごとの値」を表示したものだ。「気圧・降水量」と「気温・蒸気圧・湿度」の詳細データを表示するように指定している。ちなみに、この記事を執筆したのは8月15日で、その前日となる8月14日までのデータがWebページに掲載されている。8月15日以降は未来のデータになるため、現時点では空白になっている。
パワークエリを使って、このデータ表をExcelに取り込んでみよう。WebページのURLを選択し、「Ctrl」+「C」キーを押してURLをコピーする。
続いて、Excelを起動し、「データ」タブにある「Webから」をクリックする。
すると、以下の図のような画面が表示される。ここに先ほどコピーしたURLを「Ctrl」+「V」キーで貼り付けて「OK」ボタンをクリックする。
続いて、Webへのアクセス方法に関する確認画面が表示される。通常は「匿名」のまま「接続」ボタンをクリックすればよい。
このような画面が表示され、画面左側に「取得可能なデータ表」が一覧表示される。この中から「実際に取得するデータ表」を選択すると、そのプレビューが画面右側に表示される。これを確認してから「データの変換」ボタンをクリックする。
「Power Query エディター」が起動し、選択した表からデータが取得される。ただし、必ずしも適切な形でデータが取得されるとは限らない。
前回の連載で紹介した「PDFからデータを取得する場合」と同様に、このデータを利用するには、データ表を適切な形に整理してあげる必要がある。
取得したデータ表の整理
「データ取得元のWebページ」と「実際に取得されたデータ」を見比べながら、データ表を整理していこう。今回の例では、表の“見出し”が最大で4つに階層化されている。
これらのうち、「列名」として取得されているは1階層目のみ。2階層目以降の“見出し”は「データ」として取得されてしまっている。これを適切な形に整理するには、2階層目以降の“見出し”も「列名」に含めるように、自分で「列名」を入力しなおさなければならない。
とはいえ、すべての「列名」を入力しなおすのは面倒なので、先に“不要な列”を削除しておこう。ここでは「降水量の合計」、「最高気温」、「平均湿度」の3つが必要な場合を例に話を進めていく。この場合、「気圧」などの列は不要なので、これらの列を削除する。
不要な列を削除できたら、それぞれの「列名」を内容が理解できるように修正していく。たとえば、「気温(℃)」→「最高」→「値」という階層になっていた列は、「最高気温(℃)」という列名に修正すると内容を理解できる。同様に、「湿度(%)」→「平均」の列は、「平均湿度(%)」で内容を理解できるはずだ。
これで「列名」の修正は完了。不要になった“1~3行目のデータ”を削除しておこう。この処理は、「行の削除」→「上位の行の削除」を選択し、削除する行数に「3」を指定すると実行できる。
最後に、各列の「データ型」を指定する。小数点以下を含む数値データの場合は「10進数」、小数点以下を含まない数値データの場合は「整数」のデータ型を指定するのが基本だ。このとき、「--」の文字列がErrorになってしまうが、これらのセルは出力時に「空白セル」に置き換わるので、Errorのまま放置しておいても構わない。
「閉じて読み込む」をクリックしてデータ表をExcelに出力し、各列に「表示形式」を指定すると、以下の図に示したようなテーブルを得ることができる。
以上が、Webからデータを取得するときの大まかな流れとなる。「データ表をどのように整理していくか?」は取得元の状況に応じて変化するが、たいていの場合、特に問題なくデータを取得できるだろう。
クエリの更新による最新データの取得
パワークエリならではの利点は、手軽に“最新データ”に更新できること。これはWebからデータを取得した場合も同様だ。先ほどの例を使って詳しく解説していこう。
データを取得したのは8月15日で、その時点では8月14日までのデータがWebページに掲載されていた。よって、Excelに取得されるデータも「8月14日まで」となる。その後、再びExcelファイルを開き、「データ」タブにある「すべて更新」をクリックすると、
(1)Webページからデータを取得する
(2)データ表を“適切な形”に整理する
(3)加工したデータ表をExcelにテーブルとして出力する
という処理が再実行され、「最新のWebページ」を反映させた形でデータを取り込むことが可能となる。たとえば、2日後に「すべて更新」をクリックした場合、取得されるデータが2日分増えて「8月16日まで」のデータが表示されるようになる。
このように、手軽に最新データに更新できることもパワークエリならではの利点といえる。いちいち手作業でデータを取得しなおす必要はない。「すべて更新」をクリックするだけで、現在のWebページに即したデータを取得することが可能だ。
ちなみに、データの自動更新が有効になるための条件は以下の2つ。
・URLが変更されていない
・データ表の構造が変化していない
上記の2つを満たしていれば、「すべて更新」をクリックするだけで、問題なく最新データに更新できるだろう。
Webページからデータを取得した例
見た目が「表」になっていなくても、Webページからデータを取得できるケースもある。思い通りにデータを取得できるかはケース by ケースになるが、いくつか例を紹介しておこう。
以下の図は、「毎日新聞」のWebサイトで「1日のアクセス数ランキング」のページを閲覧した例だ。2024年8月15日にWebページを閲覧したので、前日の8月14日のアクセス数ランキングが表示されている。
パワークエリを使って、このWebページからデータを取得すると、以下の図のようなデータを取得できた。列名が「Column1」や「Column2」などになっているが、それ以外は特に問題なくデータを取得できているようだ。
文字数(Column4)の列を削除し、各列に適当な「列名」を入力してからExcelに出力する。その後、テーブルの書式を調整すると、以下の図のような形でデータをExcelに取り込むことができた。
もちろん、データの自動更新にも対応している。以下の図は、2日後である8月17日に「すべて更新」をクリックした例だ。テーブルの内容が「8月16日時点のアクセス数ランキング」に更新されているのを確認できる。
このように掲載元のWebページが「表」の形式になっていなくても、文字情報だけを問題なく取得できるケースもある。
もうひとつ例を紹介しておこう。以下の図は、「ORICON NEWS」のWebサイトで「デイリー シングルランキング」のページを閲覧した例だ(2024年8月13日付のランキング)。
このWebページからも問題なく「Power Query エディター」にデータを取得することができた。こちらも「列名」が取得されていないが、元のWebページにも「列名」に相当する文字がないので、これは仕方のない問題といえるだろう。
不要な列を削除し、各列の「列名」を自分で入力してからExcelに出力する。その後、テーブルの書式を調整すると、以下の図のような形でデータをExcelに取り込むことができた。
ただし、こちらのデータを自動更新することは不可となる。というのも、日付に応じてWebページのURLが変化する仕組みになっているからだ。最新の情報に更新するには、データの取得元となるURLを変更しなければならない。
念のため、その手順を紹介しておこう。「データ」タブにある「クエリと接続」をクリックし、クエリの一覧を表示する。その後、クエリ名をダブルクリックして「Power Query エディター」を起動する。
「Power Query エディター」が起動したら、「詳細エディター」をクリックし、処理内容全体のM言語を表示する。このM言語内にある「ソース = Web.BrowserContents("……")」の部分がデータ取得元のURLを指定する部分だ。
URLを書き換えてから「OK」ボタンをクリックすると、指定したURLからデータを取得しなおすことが可能となる。
このように、Webページからのデータ取得は、取得元のWebページに応じて状況が大きく変化する。問題なくデータを取得できる場合もあれば、データ表を整理するのが難しい場合もあるし、「すべて更新」では最新データに更新できない場合もある。上手に活用するには少しだけWebの知識も求められるが、気になる方は試してみるとよいだろう。