コーディング経験がなくても、Google SheetsのIMPORTXMLおよびIMPORTHTML関数を活用して、Webサイトから価値あるデータを抽出する方法を学びます。
- Google SheetsをWebスクレイピングに使うメリット
- 最初のスクレイピング用シートを作成する
- 必須のGoogle Sheetsスクレイピング関数
- ステップバイステップのデータ抽出ガイド
- 制限事項と高度なシナリオ
- 自動データ更新の設定
- スクレイピングプロセスの最適化
- 次のステップ
Google Sheetsは、プログラミング知識を必要とせずにデータ抽出を行える、驚くほど強力なソリューションを提供します。Webサイトから構造化データや表形式データを収集するのが得意で、収集した内容をすぐに分析・可視化できます。これにより、次のようなさまざまなユースケースに最適です。
- ECプラットフォームでの商品の価格監視
- オンラインディレクトリからの連絡先リスト作成
- ソーシャルチャネル全体のエンゲージメント指標の追跡
- マーケティング分析のための公開センチメントの収集
収集したデータは、CSVなどの形式に簡単にエクスポートして、既存システムと連携できます。
開始するには、https://sheets.google.com に移動し、+ アイコンを選択して新しいスプレッドシートを作成します。
Webスクレイピング技術の学習用に特別に設計されたデモサイトである、Books to Scrape を使用しましょう。
Google Sheetsには、スプレッドシート内で直接データ抽出を可能にする強力な数式がいくつか用意されています。ここでは、Webスクレイピングに最も有用な2つの関数を見ていきます。
IMPORTXML 関数は、XPathセレクターを使用して構造化データをスプレッドシートへ取り込みます。XML、HTML、CSV、TSV形式に対応しており、次の構造に従います。
=IMPORTXML(url, xpath_query)
この関数は、XPath を使って特定の要素をターゲットにすることで、任意のWeb URLからデータを取得します。たとえば、デモサイトからメイン見出しを抽出するには、次の数式を入力します。
=IMPORTXML("https://books.toscrape.com/catalogue/category/books/default_15/index.html", "//h1")
この関数を初めて使用すると、Google Sheetsが外部サイトへ接続するための権限を求めます。
Allow access をクリックすると、セルにはターゲットページのH1見出し内容である「Default」が表示されます。
IMPORTHTML 関数は、次の形式でWebページからテーブルやリストを抽出することに特化しています。
=IMPORTHTML(url, query, index)
この関数は、query パラメータ("table" または "list")と、取得するテーブルまたはリストを指定する index 番号(1から開始)に基づいてデータを抽出します。たとえば、例のサイトから書籍一覧を抽出するには次のとおりです。
=IMPORTHTML("https://books.toscrape.com/catalogue/category/books/default_15/index.html", "list", 2)
この数式により、スプレッドシートに書籍リスト全体が入力されます。
基本を理解したところで、より構造化された抽出プロセスを作成していきます。IMPORTXMLを使用して、Books to Scrape Webサイトから書籍タイトル、価格、評価を取得します。
まず、適切な列見出しをスプレッドシートに設定します。
書籍タイトルの正しいXPathを特定するには、ブラウザの開発者ツールを使用します。
- 最初の書籍タイトルを右クリックします
- Inspect を選択します
- ハイライトされたHTML要素を右クリックします
- Copy > XPath を選択します
単一の書籍タイトルに対する生のXPathは、次のようになります。
//*[@id="default"]/div/div/div/div/section/div[2]/ol/li[1]/article/h3/a
すべての書籍タイトルを抽出するには、このXPathを修正する必要があります。
- すべてのリスト項目をターゲットにするために、
li[1]をliに置き換えます - タイトル属性全体を取得するために、
aをa/@titleに変更します - XPath内のダブルクォートをシングルクォートに変換します
この最適化した数式をセルA2に入力します。
=IMPORTXML("https://books.toscrape.com/catalogue/category/books/default_15/index.html", "//*[@id='default']/div/div/div/div/section/div[2]/ol/li/article/h3/a/@title")
シートにはすべての書籍タイトルが入力されます。
次に、価格データの数式をセルB2に追加します。
=IMPORTXML("https://books.toscrape.com/catalogue/category/books/default_15/index.html", "//*[@id='default']/div/div/div/div/section/div[2]/ol/li/article/div[2]/p[1]")
最後に、セルC2で評価を取得します。
=IMPORTXML("https://books.toscrape.com/", "//*[@id='default']/div/div/div/div/section/div[2]/ol/li/article/p/@class")
完成したスプレッドシートには、3つのデータポイントがすべて表示されます。
評価が star-rating Three や star-rating Four として表示される点に注意してください。残念ながら、Google SheetsはXPath 2.0をサポートしていないため、数式内でこのデータを直接変換できません。
Google Sheetsは基本的なスクレイピングには有効ですが、次の点で大きな制限があります。
Dynamic Content: Webサイトが初期レンダリング後にJavaScript経由でデータを読み込む場合、Google Sheetsの数式は静的HTMLのみを処理するため、このコンテンツを取得できません。動的サイトの場合は、ヘッドレスブラウザを使ったPythonスクリプトが必要です。
Pagination: Google Sheetsは複数ページを自動的に巡回できません。各ページごとにURLと数式を手動で更新する必要があり、すぐに非現実的になります。
Interactive Elements: データ表示前にクリック、スクロール、フォーム送信が必要なWebサイトは、Google Sheetsの機能範囲を超えています。
これらの高度なシナリオでは、プロキシ、CAPTCHA、ユーザーエージェントのローテーションを自動的に処理する、Bright Dataの包括的なスクレイピングソリューションを検討してください。
価格追跡や監視用途では、データを自動的に更新したいはずです。
Google Sheetsで更新頻度を設定するには、次の手順です。
- File > Settings をクリックします
- Calculation タブに移動します
- 希望する再計算間隔を設定します
1分または1時間の更新間隔を選択できます。
Google Sheetsではこの2つの更新オプションに制限されますが、Bright Dataのような専用スクレイピングソリューションでは、より柔軟なスケジューリングが可能で、複数形式(JSON、CSV、Parquet)でデータを提供できるため、エンタープライズ規模のデータ収集に最適です。
スクレイピング効率を高め、潜在的な問題を減らすために、次の点を改善してください。
Be Selective: 必要なデータポイントだけを抽出し、ターゲットWebサイトへの不要な負荷を避けます。
Implement Delays: 大規模プロジェクトでは、リクエスト間に待機を入れ、オフピーク時間にスケジュールして、レート制限やIPブロックの発生を防ぎます。
Handle Anti-Scraping Measures: 多くのサイトは自動アクセスを検出するためにCAPTCHAチャレンジを使用しています。センシティブなスクレイピングタスクでは、自動IPローテーション付きプロキシの使用を検討してください。
Review Legal Requirements: スクレイピングの前に、Webサイトの利用規約と robots.txt ファイルを必ず確認してください。
Google Sheetsは、特に構造化データを持つ静的Webサイトに対して、Webスクレイピングの優れた入門手段を提供します。
動的コンテンツ、大量データ、または高度なアンチスクレイピング対策を伴うより複雑な要件には、Bright Data's Web Scraper API が、プロキシ、CAPTCHA、さまざまな出力形式の組み込み処理を備えたスケーラブルなソリューションを提供します。
今すぐ無料トライアルに登録して、データワークフローの最適化を始めましょう!









