迷えるサンタさんへ　ノーコードでスクレイピングしてクリスマスプレゼントを探す

╭━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╮ 
　**まだプレゼント何にするか考えてないぞ！**
╰━━ｖ━━━━━━━━━━━━━━━━━━━━━━━━━━━━╯

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/79431272-82c7-8e8f-2b7e-10b99ab92124.jpeg" width=75%>

そのようなサンタの方はamazonをスクレイピングしてプレゼント候補を見つけましょう。
しかしながら、必ずしも全てのサンタさん（親御さん）がコードを書けるわけではなく、クリスマスイブ当日に打ちひしがれている方もいらっしゃるのではないかと思いました。

そこで本記事では、Google SpreadSheetを活用したスクレイピングを紹介していきたいと思います。

:::note info
本記事では従来のスクレイピングであるimportxmlを前段として紹介しています。
本題についてはImportFromWebの部分からとなりますので、前段部分は読み飛ばしていただいても構いません。
:::

## importxml関数

Google SpreadSheetに備え付けられた関数です。
URLとXPathからHTML要素を抜き出して表示することができます。

## importxmlでyahooのトップページをスクレイピングする

まずは試しに[yahooのトップページ](https://www.yahoo.co.jp/)ニュースタブにあるニュースをimportxmlでスクレイピングしてみます。
元のページは下の図の通り

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/79eef6b5-77ed-c9f4-9346-312dac9a6974.png" width=75%>

これをスクレイピングしてスプレッドシートにまとめたものが以下の通りとなります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/deed47e8-d3d5-c98b-a412-7d64cb71d39b.png" width=75%>

yahooのページから情報を取得してまとめることができました。

#### 【参考】 ページ要素からのXPath取得

1. ブラウザの開発者ツール（F12キーで開きます）で、取得したい要素をクリックします。
1. 該当するHTML要素の部分で右クリックして`copy > copy XPath`をクリックすると、クリップボードにコピーされるので、スプレッドシートに貼り付けてください。

## importxmlでAmazonのページをスクレイピングできるのか

できません。対策されています。

スクレイピング対策を施しているサイトをスクレイピングするためには、ブラウザを自動操作して、DOM要素をページに出力してもらわなければなりません。

そのためによく使われるのが`Python`の`Selenium`ですね。

気が向いたらseleniumでスクレイピングしてBeautifulsoupで加工する記事も上げたいと思います。

## 革新的ノーコードスクレイピング`ImportFromWeb`

それでは今年はスクレイピングできそうにない。
プログラミングを勉強して、クリスマスプレゼントを検索するのはまた来年になりそうだと、落ち込むにはまだ早いです。
chromeの拡張機能に`ImportFromWeb`というものがあり、こちらを使えばノーコードでスクレイピングできます。

https://workspace.google.com/marketplace/app/importfromweb_web_scraping_in_google_she/278587576794

むしろseleniumでコード書くより圧倒的に早く、私も驚きました。

## Amazonのページをスクレイピングする

### 1. ImportFromWebのインストール

上記サイトよりアクセスしてインストールしましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/ac16b308-de86-be7c-d169-ef0c3b94623a.png" width=75%>

### 2. スプレッドシート上で拡張機能をオンにする

ただインストールして`=importfromweb（）`と打ち込むだけでは使えません。
拡張機能のタブから有効化しましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/6f56e428-dd50-87ac-fdc2-602deb9f410d.png" width=75%>

`Activate add-on`をクリック

### 3.　`AMAZON SEARCH RESULTS`のテンプレートを実行

Activateすると下の写真のようなサイドバーが現れると思います。
TEMPLATESタブから`AMAZON SEARCH RESULTS`を選択しましょう

![スクリーンショット 2022-12-24 23.07.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/fc18aedd-c8b6-94c4-b347-729eba373759.png)

### 4. テンプレートに従ってスクレイピング

少しのロード時間の後、iPhone Coverの検索結果をスクレイピングしたサンプルが出てくると思います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/726ebc86-b58d-06c0-bf0f-671b0ccf485c.png" width=75%>

E3セルのチェックを外して、F5セルに**クリスマスプレゼント**と入力してみましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/c92508c5-c8e7-fdf8-d316-725338faffd2.png" width=75%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100048/f8d8c97d-7774-1d5d-72a8-9fd62c1462db.png" width=75%>

検索結果がスクレイピングされて、スプレッドシート上にまとめられました。

## ImportFromWebについて

今回は検索結果をスクレイピングしてみましたが、各商品のページ要素を取得したり、Amazon以外のサイトのテンプレートが用意されていたりと、想像以上に使いやすいものでした。
気になった方は試してみてください。

## 普通に検索するだけではダメなのか

特に問題ありません。