Excelにおけるウェブスクレイピング:Power Query、VBA、およびAPIメソッド
Advanced Data Extraction Specialist
TL;DR:
- 安定したHTMLテーブルまたはJSONエンドポイントが公開されているページにはPower Queryを使用する。これにより、Excelはリフレッシュ可能で文書化された変換を実現できる。
- ユーザーがボタンで操作できるインポートや制御されたCSVの引き渡しが必要な場合はVBAを使用する。変化するページのマークアップを解析するVBAの使用は避ける。
- JavaScriptでレンダリングされたページやトラフィック検証が必要なページは、最初にAPIを使用してコンテンツを取得し、その後Excelに戻されたデータを変換させる。
- 最もメンテナンスが容易な設計は、取得と分析を分離する。ソースサービスは安定したスキーマを返し、Excelがフィルタリング、結合、ピボット、チャートを担当する。
Excelでのウェブスクレイピングは、1回のテーブルコピー、公開テーブルのリフレッシュ、JSON APIの呼び出し、ブラウザレンダリングが必要なページからのワークブックフィードという、4つの非常に異なる仕事を意味する。ページの挙動によってツールを選ぶ方が、慣れ親しんでいるかどうかで選ぶよりも信頼性が高い。
このガイドでは、Power Query、VBA、およびAPIファーストの方法を扱います。例は、プロジェクトが収集を許可された公共データに限定されています。明示的な承認なしに、プライベート、認証済み、個人、または制限された情報にアクセスするために使用しないでください。
ワークブックを構築する前に方法を選択
| ソースの挙動 | 最適なExcelのパス | リフレッシュ可能 | コーディングレベル | 主な制約 |
|---|---|---|---|---|
| 小さな一時的可視テーブル | コピー&ペースト | いいえ | なし | 手動で再現が困難 |
| 安定したHTMLテーブル | Power Query: ウェブから | はい | 低 | クライアントレンダリングされたコンテンツが見えない場合がある |
| 公共のJSONまたはCSVエンドポイント | Power QueryまたはVBA | はい | 中 | 安定したレスポンス契約が必要 |
| JavaScriptでレンダリングされた公共ページ | 取得API、その後Power Query | はい | 中 | 外部サービスが必要 |
| ボタン駆動のワークブックワークフロー | VBAがCSVまたはJSONエンドポイントを呼び出す | はい | 中 | マクロのセキュリティとメンテナンス |
実践的なルールはシンプルです。Excelはタブラー変換の責任を持ち、ブラウザのエミュレーションではありません。ウェブページがデータソースではなくプレゼンテーションレイヤーである場合は、文書化されたエンドポイントを探すか、ワークブックの前に取得サービスを配置してください。
方法1: Power Queryで可視テーブルをインポート
Microsoftのサポートされたフローはデータ > ウェブからであり、次にナビゲーターで検出されたテーブルを選択してワークブックにロードします。フルシーケンスはMicrosoftのウェブインポートガイドに記載されています。
ステップバイステップ
- ワークブックを開き、データを選択します。
- [データ取得と変換]グループでウェブからを選択します。
- 許可された公共ページのURLを貼り付けます。
- ナビゲーターでテーブルを選択します。
- 列をクリーンアップする必要がある場合はデータの変換を選択し、直接シートに書き込みたい場合は読み込むを選択します。
- クエリとテーブルの名前を変更し、その目的が明確に分かるようにします。
- ソースを再取得する必要がある場合は更新を選択します。
Power Queryは変換ステップを保存します。これは、再現可能なクエリが列を削除したり、型を設定したり、テキストを分割したり、基準データを結合したりを、すべてのリフレッシュで同じように行えるため重要です。Microsoftはまた、ロードされたウェブテーブルは同じExcel更新ワークフローでクエリ更新を使って更新できることを文書化しています。
ウェブから有用なテーブルが返されない場合
ページは最初のHTMLが到着した後にJavaScriptでデータをレンダリングすることがあります。また、HTMLテーブルの代わりにXHRまたはfetchリクエストを通じて値を公開しているかもしれません。その場合、ナビゲーターの結果は空になることがありますが、ブラウザには行が表示されます。
ブラウザ開発者ツールを開くのは、許可された文書化されたデータエンドポイントを特定するためのみで、アクセス制御を回避するためではありません。安定したJSONエンドポイントが存在する場合、Power Queryはそれを直接呼び出すことができます。トラフィック検証またはブラウザレンダリングが必要な場合は、このガイドの後半でAPIファーストの方法を使用してください。
方法2: Power Query MでJSONを呼び出す
Power QueryのWeb.Contents関数はHTTPリクエストを実行し、Json.Documentに渡すことができるバイナリレスポンスを返します。Microsoftは、Web.Contentsリファレンス内で、Headers、Content、RelativePath、Query、ApiKeyNameを含むリクエストオプションを文書化しています。
前提条件
- Power Queryを含むExcel
- ワークブックのウェブAPI資格情報ダイアログを通じて入力されたScrapeless APIトークン
- 許可された公共ターゲットURL
- 知っているJSONレスポンスエンベロープ
以下のPower Query Mブロックは前提条件のギャップの例で、読者のトークンとターゲットが必要です。Universal Scraping APIを呼び出し、dataから返されたHTMLを読み取り、後でパーサーまたは監査シートにフィード可能な1行のテーブルを生成します。
powerquery
let
Endpoint = "https://api.scrapeless.com",
TargetUrl = Excel.CurrentWorkbook(){[Name="AuthorizedTargetUrl"]}[Content]{0}[Column1],
Payload = Json.FromValue([
actor = "unlocker.webunlocker",
proxy = [country = "ANY"],
input = [
url = TargetUrl,
jsRender = [
enabled = true,
response = [type = "html", options = []]
]
]
]),
Raw = Web.Contents(
Endpoint,
[
RelativePath = "api/v2/unlocker/request",
Headers = [
#"Content-Type" = "application/json"
],
Content = Payload,
ApiKeyName = "x-api-token"
]
),
Envelope = Json.Document(Raw),
Checked = if Envelope[code] = 200 and Envelope[data] <> null
then Envelope[data]
else error "The acquisition response did not contain page data",
Output = #table(
{"source_url", "html"},
{{TargetUrl, Checked}}
)
in
Output
クエリを作成したら、Excelが資格情報を求めるときに Web API を選択し、トークンをそこに貼り付けます。ApiKeyName は、M ソースから秘密を排除しつつ、パラメーター名を指定します。資格情報の挙動は、Microsoft の セキュア API キーの例 に示されています。
現在のAPIリクエストの形式とJavaScriptオプションは、Scrapeless JS Renderのドキュメントでも確認できます。
返されたHTMLを安定したExcel列に変換する
完全なHTMLドキュメントを1つのセルに読み込むことは診断の橋渡しであり、最終的なデータセットではありません。生産用のワークブックはコンパクトなスキーマを受け取るべきです。
例えば:
| 列 | タイプ | 意味 |
|---|---|---|
source_url |
テキスト | 収集された標準ページ |
collected_at |
日付/時刻 | 取得時間 |
name |
テキスト | 正規化されたエンティティ名 |
price |
小数 | 通貨記号なしの数値価格 |
currency |
テキスト | ISO通貨コード |
availability |
テキスト | 正規化された可用性状態 |
この契約に到達するには2つのクリーンな方法があります:
- 取得層に構造化されたフィールドを返すように依頼する。
- 返されたHTMLをExcelの外で解析し、その後JSONまたはCSVをPower Queryに公開する。
どちらもワークブックのページマークアップへの依存を減らします。6つの命名フィールドを期待するワークブックは、数十のセレクターやテキストクリーニングステップを含むものよりもテストが容易です。
ページがこれらのフィールドが存在する前にJavaScriptレンダリングを必要とする場合は、ワークブックの再設計を行う前に、1つの認可されたURLでユニバーサルスクレイピングAPIをテストしてください。
方法3: VBAを使用して制御されたCSVの引き渡し
VBAは、アナリストが既知のシートにファイルをインポートするボタンを必要とする場合に便利です。Web取得をマクロの外に保ち、マクロは安定したCSV URLを使用させます。これにより、ワークブックが変化するHTMLに結び付けられるのを回避できます。
前提条件
- 組織のポリシーでマクロが有効になっているデスクトップExcel
- UTF-8 CSVを返す許可されたHTTPSエンドポイント
ImportedDataという名前のワークシート- エンドポイントURLを含む名前付き範囲
CsvEndpoint
このブロックは前提条件のギャップです。エンドポイントとワークブックのポリシーは読者の環境に特有です。
vb
Option Explicit
Public Sub ImportCsv()
Dim endpoint As String
Dim target As Worksheet
Dim query As QueryTable
endpoint = ThisWorkbook.Names("CsvEndpoint").RefersToRange.Value
Set target = ThisWorkbook.Worksheets("ImportedData")
target.Cells.ClearContents
Set query = target.QueryTables.Add( _
Connection:="TEXT;" & endpoint, _
Destination:=target.Range("A1"))
With query
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFilePlatform = 65001
.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=False
End With
End Sub
このマクロは意図的に狭いです:CSV契約をインポートし、取得、レンダリング、およびアクセスロジックをそれらを所有するサービスに残します。エンドポイントがカスタム認証を必要とする場合、Power Queryの資格情報ストアはVBAにトークンを埋め込むよりも適していることが多いです。
Microsoftは、Workbook.RefreshAll が外部データ範囲とピボットテーブルレポートを更新することを、Excel VBA RefreshAll リファレンスで文書化しています。これにより、各クエリが構成され、テストされた後のワークブックレベルの更新ボタンのサポートが可能になります。
APIファーストのWebスクレイピングのExcelにおける実現
APIファーストのデザインには2つの段階があります:
- ページを取得して検証する: 必要に応じてJavaScriptをレンダリングし、トラフィックの検証を処理し、期待されるコンテンツが返されたことを確認します。
2. **Excelで変換と分析を行う**: レスポンスを列に整形し、ルックアップテーブルを結合し、ピボットを作成し、チャートを公開します。
[Universal Scraping API](https://www.scrapeless.com/ja/product/universal-scraping-api?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel)は第一段階のために構築されています。Power Queryはワークブック向けのコネクタとして機能します。この境界により、チームはすべての数式やチャートを再構築せずに取得方法を変更することができます。
[Scrapelessの料金ページ](https://www.scrapeless.com/ja/pricing?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel)を使用して、サービスのコストをブラウザインフラを運用するために必要なエンジニアリング時間と比較してください。Excelパイプラインに適したレスポンス形式の広範なビューについては、[Universal Scraping APIレスポンス形式の更新](https://www.scrapeless.com/ja/blog/response-formats-update?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel)をご覧ください。
## 一般的な問題と解決策
### ナビゲーターにテーブルが表示されない
ページが初期レスポンスで安定したHTMLテーブルを公開していない可能性があります。許可されたJSONまたはCSVソースを探してください。値がJavaScriptの後にのみ表示される場合は、完了したコンテンツを返す取得層を使用してください。
### 更新時にプライバシーレベルエラーが発生する
Power Queryはプライバシー設定に応じてデータソースを隔離します。ワークブックのソース設定を確認し、ポリシーが許可しない限り、プライベートな組織データと公開ソースを組み合わせないでください。
### 一台のコンピュータではクエリが機能するが、別のコンピュータでは機能しない
Excelのエディション、認証設定、名前付き範囲、マクロポリシー、およびゲートウェイ要件を確認してください。資格情報は環境固有であり、ワークブックファイル内を移動するべきではありません。
### ワークブックがチャレンジページを読み込む
変換前にコンテンツレベルの検証を追加してください。期待されるJSONフィールド、CSVヘッダー、またはページマーカーを必要とします。その契約を満たさないレスポンスは拒否してください。
### 更新後に列の型が変わる
ソースステップの後にPower Queryで明示的なデータ型を適用してください。通貨シンボル、ロケール固有の区切り記号、および欠損値を数値列から除外してください。
### 更新に時間がかかりすぎる
データがExcelに到達する前に減らしてください。ソースで日付や識別子でフィルタリングし、必要なフィールドのみをリクエストし、ワークシートが必要でない場合は中間クエリを接続のみにしてロードしてください。
## ワークブックプロトタイプから本番フィードへ
有用な進行は以下の通りです:
1. 一つのURLと一行を手動で証明します。
2. 明示的な列名と型を持つPower Queryを作成します。
3. コンテンツ検証とエラーシートを追加します。
4. レンダリングとHTMLパースを取得サービスに移動させます。
5. バージョン管理されたスキーマでJSONまたはCSVを公開します。
6. Excelの外部で収集をスケジュールし、ワークブックの更新を分析に集中させます。
これにより、スプレッドシートは放置されたウェブブラウザにならずに便利に保たれます。ワークブックはクリーンデータの消費者となり、これはExcelが得意とする役割です。
## 結論: Excelに分析させ、ブラウザを模倣させない
Power Queryは、更新可能なHTMLテーブルやJSON APIのデフォルトの選択肢です。VBAは、制御されたユーザー起動のインポートに価値があります。許可されたソースがJavaScriptやトラフィック検証に依存する場合は、取得APIを使用してExcelに安定したデータ契約を与えてください。
その境界を構築するには、[Scrapelessアカウントを作成](https://app.scrapeless.com/passport/login?utm_source=website&utm_medium=blog&utm_campaign=universalscrapingapi&utm_term=web-scraping-in-excel)し、一つの公開URLでUniversal Scraping APIをテストし、ワークブックが必要とするフィールドを定義し、それらのフィールドを更新契約にしてください。
## よくある質問
### Excelはコードなしでウェブサイトをスクレイピングできますか?
はい。Power QueryのWebからのコネクタは、グラフィカルなワークフローを通じて多くの可視HTMLテーブルをインポートできます。初期HTMLでテーブルを公開している安定した公共ページに最適です。
### なぜPower Queryは空のページを表示するのですか?
値が初期レスポンスの後にJavaScriptによってレンダリングされたり、別のエンドポイントから読み込まれたり、トラフィック検証ページに置き換えられたりする可能性があります。ソースの動作を確認し、それに応じた取得方法を選択してください。
### ウェブスクレイピングに対してPower QueryはVBAより優れていますか?
通常、Power Queryは更新可能なデータ変換や資格情報管理に優れています。VBAはワークブックのボタンや制御されたファイルインポートに役立ちますが、HTMLパースを維持するには脆弱な場所です。
### Power QueryはJSON APIを呼び出せますか?
はい。`Web.Contents`はレスポンスを取得でき、`Json.Document`はそれをレコード、リスト、テーブルにパースできます。MコードにAPIシークレットを保存するのではなく、資格情報ダイアログを使用してください。
### ワークブックはJavaScriptでレンダリングされたページをどのように処理できますか?
レンダリング能力のある取得サービスを使用してHTML、JSONまたはCSVを返し、その出力にPower Queryを接続します。これにより、ブラウザの動作がスプレッドシートの外に保たれます。
### Excelはスクレイピングしたデータをどれくらいの頻度で更新すべきでしょうか?
ビジネスニーズ、ソースの権限、サービス容量に応じて更新頻度を合わせます。定期的または大量のデータ収集の場合は、Excelの外で取得を実行し、ワークブックが準備されたデータセットから更新されるようにします。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



