パワークエリ備忘録(Web.Page関数、web.Contents関数、Pdf.Tables関数)

20231107パワークエリ備忘録(Web.Page関数、web.Contents関数、Pdf.Tables関数) 

こちらは、パソコン素人です。
久々にパワークエリ(エクセル)をしたのですが、やはり素人です。汗。
(これらは自分用のメモです。)
不都合あれば削除いたします。

 

先日、

ネット(「エクセルの学校」さんの質問・回答『毎月アドレスが変わるwebページからデータを取得したい』について検証しました。(単にコピペしただけか。)

それを参考に、他のwebの記事を取れるように直そうと勉強しています。(まだ途中です。)

少し分かったことを書きます。

 

*******************************参考(気象庁のHPのデータを取得するクエリ)
クエリ名:fnテーブル取得
 (年 as number, 月 as number) as table =>
 let
    url="http://www.data.jma.go.jp/obd/stats/etrn/view/daily_a1.php?prec_no=44&block_no=0371&year=" & Text.From(年) & "&month=" & Text.From(月),
    ソース = Web.Page(Web.Contents(url)),
    フィルターされた行 = Table.SelectRows(ソース, each ([Source] = "Table")),
    削除された他の列 = Table.SelectColumns(フィルターされた行,{"Data"})
 in
    削除された他の列

**************************************************

 

上記ののサイトを「気象庁」でなく、「住民基本台帳の人口」にしてみようと思いました。
簡単なものを探していたら近隣県の●●県のサイトにあったので、それを使いました。

 

で、簡単な形にして試しました。
上記例に似せたコード1は、失敗。コード2は成功。


コード1:
let
    ソース = Web.Page(Web.Contents("https://www.pref.●●.lg.jp/sichousien/documents/r5_4jukijinko.pdf"))
in
    ソース

 

コード2:
let
    ソース = Pdf.Tables(Web.Contents("https://www.pref.●●.lg.jp/sichousien/documents/r5_4jukijinko.pdf"))
in
    ソース


コード1はWebPage関数がタイムアウト(100秒)してしまう。

 

「pdfには使えないのか」とBingChatに質問してみた。
BingChatの回答をそのまま掲載するのは、著作権とかどうなのか分からないので、内容だけ書くと以下の通り。(正しいのかは分からないが、多分正しいのだろう。)

 

************************************************
両方のコードで使用している「Web.Contents関数」は、指定したURLからコンテンツをダウンロードし、バイナリ形式で返すとのこと。
(この関数には、HTTPリクエストのタイムアウトを変更するための「Timeout」パラメータがあり、デフォルト値は100秒。)

で、コード1に使用している「Web.Page関数」はHTMLドキュメントの内容を返し、その構成要素に分解します。
つまり「HTML」でないと「Web.Page関数」はうまく動かないらしい。


だから、同じhttps:のアドレスでもpdfだとダメらしい。

 

そこで、コード2のようにすれば、「Pdf.Tables関数」を使用してPDFファイルからデータを取得することができる。
****************************************************

うーん。コード2の方は、パワークエリのステップを進めているうちに勝手にできたコード(を少し変えたもの)。
これだと、それ以降の処理が「エクセルの学校」クエリ「fnテーブル取得」と違うので、クエリ「fnテーブル取得」をまねてコード1を手入力したのだが、うまくいかなかった。


簡単にやろうとしてもなかなかうまくいかないものだと今日も反省・・・。