Script)でスクレイピングを行い、Amazonの商品一覧ページから「タイトル」と「価格」をスプレッドシート上に取得する処理を書いてみたので手順を残しておきます。スクリプトを書いてみる対象のページと結果まず今回作成した処理でどの様な結果が得られるのかを説明します。処理の対象としたページは、以下の様なAmazonの商品一覧ページ。上記ページを対象として処理を実行すると、スプレッドシート上にこの様な形でデータが保存される処理となります。触りだけなので、商品の個別ページまで移動して詳細データを取得してきたり、自動で次のページに移動する処理などは無し。処理の中身を紹介していきます。スポンサーリンクスクレイピング用のライブラリを追加するGASはJavaScriptがベースとなっているのですが、スクレイピングなどでよく使う「getElementBy~」系のメソッドは用意されていません。「UrlFetchApp.fetch」を使って目的のページのhtmlを取得し、matchメソッドや正規表現を使って目的の情報を抽出するという方法が一般的の様です。正規表現はあまり得意ではないのとメンテが面倒臭そうなのでそれはパス。いう事で他に方法は無いかを探してみた所、有志の方々がスクレイピング用のライブラリを作ってくれている様なのでそれを使ってみる事に。Parser色んなサイトでも紹介されている定番ライブラリ「Parser」です。https://www.kutil.org/2016/01/easy-data-scrapping-with-google-apps.html(英語サイト)設定方法は非常に簡単です。上記ページ内に掲載されているライブラリのプロジェクトキーを、自身のスクリプトエディターに以下の手順で登録します。「リソース」メニューから「ライブラリ」を選択。上記1~4の手順でライブラリを設定する事で、「Parser」が使用可能になります。記述方法Parserを使う場合は以下の様に記述します。取得対象の終わりの文字列を、それぞれ引数として渡します。build()には引数不要。これだけだと分かり難いと思いますので、公式のイメージ図を添付しておきます。users“>の部分をそれぞれ「from」と「to」に指定するというイメージです。組み合わせに一致するコードが複数存在した場合についてですが、Parserの最後に「.build();」と記述した場合は一番最初にヒットした情報のみが返ってきます。一致するコード全てのデータが欲しい場合は、「.build();」の部分を「.iterate();」と記述しましょう。これで一致するデータが配列として返ってきますので、以下の様な形で配列の4番目のデータを取り出す事ができます。.iterate();Logger.log(titleList[3]);スポンサーリンクparser最初の「Parser」と名前は良く似ていますが、こちらは日本の方が作成された別のライブラリです。当初はこちらを使おうと思っていたのですが、色々試した結果断念しました。https://tadaken3.hatenablog.jp/entry/parser-for-gasこちらのメリットは何と言っても「getElementBy~」形式で記述できる所。Parserだと実際のソースをコピペしなければいけない所が手間ですし、「img1」、「img2」・・・といった感じで、対象ソースの一部に連番が含まれていると一気にデータを取れないという不便さがあります。使い方としては以下の様に使うらしいです。「XmlService.parse」の所で早速何かエラーが出ました。well-formed.(ルート要素に先行するドキュメント内のマークアップは整形式でなければなりません。原因の箇所ははっきり分かりませんが、とりあえずXMLの整形式に沿っていないと。『Amazonのソースコードが解析できる形になってませんよ』ってこと?知らんがな。・・・とりあえず原因となる部分を修正してあげないと読めないってことね。いう事であの膨大なコードを調べて原因を潰すなんて事をわざわざやってられないので、今回こちらのライブラリについては見送る事に。ちなみにYahoo!のニュースサイトでも試してみたのですが、同様に解析段階でエラーとなってしまいました。こちらは「<link>タグが閉じられてないよ!」って言われてるみたいです。厳しい!なまじ動いちゃう分、しっかりタグ閉じしてないサイトってたくさんあると思うんですよ。単純な閉じ漏れも含めて。いうサイトが全部アウトって考えるとスクレイピングできるサイトってそれなりに限られてしまうのでは?と思う。それって実用性低くない?このメソッド大丈夫?・・・って個人的には思うんですが、GAS自体スクレイピングにあんまり興味無さそうなんで、「やりたければ他の方法(言語)でやってくれ」って事なのかもしれませんね。「getElement~」が使えませんしスクレイピング関連のメソッドも少ないですし。※念のため書いておきますが、これらのエラーの原因はparserライブラリとは関係ありません。スクリプトを書いてみるという事でParserライブラリを用いて、冒頭のAmazonの一覧ページからデータを取得する処理を書いてみました。}}※使い方の確認なので、最適化はしていません。上記のコードをそのまま(出力先シートID、URLは要変更)実行すると、冒頭のスプレッドシートの様な出力結果を確認する事ができます。Parserの書き方は記事中で解説していますし、特に複雑な処理は無いので特に説明はしません。後はこれを応用して対象サイトや収集する情報を増やす事で、毎日自動的に情報を集めてくれる販売商品のリサーチ用アプリが作れそうですね。Seleniumでのウィンドウ切り替えについて現在VB.NetとSeleniumを組み合わせて何か新しい事を出来ないかと試行錯誤していますが、その中でちょっと手間取ったウィンドウの切り替...記事を読むブラウザの待機処理がうまくいかない場合の対処方法VBAでIE操作を行う場合、ブラウザの読み込み待機処理はほぼ必須で使われていると思います。最近、とある改修案件で他の人の作成したプロ...記事を読むメールの「アクティビティ」はチェックしてる?ワンタイムパスワード導入のすすめ私が使用しているメールアカウントは、普段使いのものだけで6個存在します。出来るツール以前公開した「PythonでBASEのAPIを叩いてみる~」系の記事の続きです。記...記事を読むラクマの画像編集画面が消えた事を確認する方法(VBAプログラミング)以前ラクマの自動出品化についての記事を書いた際、画像編集用のフォームを操作しました。前回ショップへアクセスするための「アクセストークン」を取得しました。今回はこのアクセストークンを使って商品デー...記事を読むHTMLページのソースだけを読み込んで高速化させる処理について(VBAプログラミング)今回はVBAプログラミングのお話です。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。固定ページ内を検索プロフィール藤美れいん(ふじみれいん)プログラマとして入社後、数年の開発経験を経てフリーへ転職。せどり、ネットショップ運営、パチスロ期待値稼働、プログラム開発等々を経験し今に至る。現在は一時的に復職し、都内某所で活動中。過去に公開したツールなどは、サイト上部のメニューにある「TOOLS」をご覧下さい。プログラムに関する質問、その他ご相談はメールやTwitterからどうぞ。@raine_fujimi※返信は大体数日後になります。返信できない場合もありますので予めご了承下さい。