Googleスプレッドシートのimportxml関数をhtmlに使う
importxml関数は前回記したようにxmlを出力するAPIを利用することが出来る。前回の記事『Googleスプレッドシートのimportxml関数でWikipedia API(単語の各言語表記を取得)』
Googleスプレッドシートにはimporthtmlという関数もあるが、こちらはhtml内にある表やリストを指定して取得する関数であり、使いみちが限られる。(まともに使ったことがないので詳細不明)
htmlに対しての利用
importxml関数はhtmlに対しても使用できる。
例えば前回APIで取得したWikipediaの情報をAPIを使わずにhtmlから直接取得してしまうことも出来る。(通常APIを用意してあるサイトはAPIを用いて取得すべきなので、これはあくまで例として掲載しているのみであり、APIが用意されているサイトをhtmlでの取得はしないほうが良い)
=IMPORTXML("https://ja.wikipedia.org/wiki/"&B6&"","//title")
この例だとB6セルに入力したWikipediaの記事名のページからxpath でtitleタグを取得するよう指定しており。ページのタイトルが取得される
=JOIN("",IMPORTXML("https://ja.wikipedia.org/wiki/"&B6&"","//*[@id='mw-content-text']/div[1]/p[1]"))
さらに、このように指定すると、記事の要約も取得出来る。
JOIN関数で囲んでいるのは記事が複数の段落になっている場合があるためである。xpathで段落<p>タグを指定している為、複数ある場合配列となり、複数セルに展開される。
複数セルに展開したほうが良い場合はJOINで囲む必要はないが、文章が一つのセルに収まってほしい場合はこのようにJOIN関数で配列を一つのテキストにする。
こちらの画像ではLinuxを入力した行とUbuntuを入力した行の2行があり、それぞれtitleと要約を取得しているので計4つのimportxml関数を指定したセルが存在している。
実はこのimportxmlを指定したセルの数がとても重要である。
importxml関数は一回一回の取得する動作が重いので、複数セルで指定すると取得がどんどん遅くなり、10箇所くらいならまだ大丈夫なものの20以上となるとかなり動作が怪しく、取得に失敗する。
なので、普通の関数のつもりでまとめて一列1万セルに貼り付けなんてやってしまうと固まる。
つまり、importxml関数はそういう使い方は向かないのである。
前回のWikipedia APIの利用例のように一つのセルにimportxml関数を記述し、複数セルに展開するのが好ましい使い方だと言える。
そのような使い方であれば高速に動作しとても便利に感じるはずである。
htmlの複数セル展開
htmlに対してもAPIでxmlを取得するのと同様に配列を展開できる。
一例としてYahooショッピングでの検索結果を取得する。
=IMPORTXML("https://shopping.yahoo.co.jp/search?first=1&tab_ex=commerce&fr=shp-prop&oq=&aq=&mcr=3e3872a632eb5248bc76b8569a0a9363&ts=1614767575&p="&B6&"&cid=&pf=&pt=&area=13&astk=&sc_i=shp_pc_top_searchBox_2&sretry=1","//li[@class='LoopList__item']")
こちらもB6セルに入れた文字、この例ではLinuxでYahooショッピングを検索した結果が複数セルに展開されている。
xpathの指定はChromeブラウザであれば検証>Copy>Copy Xpathで簡単に取得できる
はまり安い注意点としてはCopyしたXpath内のダブルクォーテーションはシングルクォーテーションに書き換えないとエラーで動作しない事くらい。
xpathの複数指定
=IMPORTXML("https://store.shopping.yahoo.co.jp/ebookjapan/b00162119294","//title|//h2")
コメント
コメントを投稿