IMPORTXML(インポートエックスエムエル) - Googleスプレッドシート関数
IMPORTXML(インポートエックスエムエル)関数は、XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類のWEB上のデータからURLを指定してデータをインポートします。
・関数 | IMPORTXML(読み方:インポートエックスエムエル)
|
・書式 | =IMPORTXML(URL,XPathクエリ) |
・内容 | さまざまな種類のデータから文字列をインポートします |
URL
検証するページのURL(http://、https://から始まる絶対値)
XPathクエリ
目的のデータを含むアイテムの種類を XPath形式で指定します
このページのstrongタグを呼び出す場合
"/html/body/div/div/div/strong"
「//」で直前までのパスを省略することができます
"//strong"
例)このページの"strong"を呼び出す場合
=IMPORTXML(
"https://google.dw230.com/importxml/",
"//strong")
例)このページの2番目の"p"タグを呼び出す場合
=IMPORTXML(
"https://google.dw230.com/importxml/",
"//p[position()=2]")
例)このページの3番目以降の"p"タグを呼び出す場合
=IMPORTXML(
"https://google.dw230.com/importxml/",
"//p[position()>3]")
position()が「=」の場合は省略できます
=IMPORTXML(
"https://google.dw230.com/importxml/",
"//p[2]")
対象クエリが見つからない場合「#N/A」エラーを返します
XPath(エックスパス)形式
「パスのような」構文を使用して、XMLドキュメント内のノードを識別およびナビゲートします
対象がHTMLの場合は上から
/html/body/div/div/div/strong
htmlの中のbodyの中のdivの中のdivの中のdivの中のstrongタグ
複数のdivを使ってる場合は指定が面倒です1階層でも間違えば「#N/A」エラーになります
IMPORTXML関数で取得した文字化けする場合
IMPORTXML関数は対象ページがUTF-8以外だと文字化けします
自分で作成したページならばUTF-8に変更すればよいですが、変更できない場合
裏技的な取得方法としては
YAHOOの検索結果にある「キャッシュ」
キャッシュはUTF-8に変換されていますから文字化けせず取得できます
YAHOO検索とbing検索のキャッシュからは取得できますが、Google検索のキャッシュからは「URL を取得できませんでした」とエラーになります
IMPORTXML関数の使用回数の上限
取得中は「loading」が表示されますが「loading」終わらない場合
試しにアクセスログのページからURLをコピーしてタイトルを取得してみたところ
B列にURLを貼り付けた場合
ログが絶対リンクならばセルB2と指定すればよいが
ログが相対リンクの場合はURLの"https://google.dw230.com/"を「&」でつなげます
=IMPORTXML(
"https://google.dw230.com/"&B2,
"//title")
一気に500行くらいコピーしたところエラーのままだったので10行づつくらい試したところ
150~200くらいで下記のエラーになりました
リクエスト数が多いためデータの読み込みに時間がかかる可能性があります。スプレッドシート内で作成した
IMPORTHTML、IMPORTDATA、IMPORTFEED、IMPORTXML 関数の量を減らしてみてください
他のPCでも試したがやはり150~200くらいでエラーになります
別のシートでも50個、50個、50個と3シート目でエラーになります
1時間くらい放置したところほとんど表示されましたがところどころエラーになっています
タイトルだけの取得ならば50個くらい取得したらコピーして値で貼付けしたほうが早く取得できます
IMPORTXMLで普通のホームページから取得できるのは
title、strong、span、h、p、div、などで
meta の description や keywords は取得方法が変わります
meta の descriptionを取得する場合
=IMPORTXML(
B2,
"//meta[@name='description']/@content")
meta の keywordsを取得する場合
=IMPORTXML(
B2,
"//meta[@name='keywords']/@content")
a タグは</a>までのテキスト部分を取得します(URLは取得しません
URLを取得する場合は
=IMPORTXML(
B2,"
//a/@href")
head は構造化データがある場合だけ構造化データの中身を取得します
IMPORTXML関数を使用した関連ページ
→
WEBサイトからタイトルやキーワード、アイコンを取得
→
「IMPORTHTML」と「IMPORTXML」の違い
IMPORTXML関数とよく使う関数
IMPORTXML(インポートエックスエムエル)>
HOME