サーバーレスでWebスクレイピングする方法

2024/11/17

t f B! P L
eyecatch ディーエックス、ディーエックス、言うとりますが、デジタル・トランスフォーメーションの略で「DX」って、DTじゃないんかい?!と思ったのは自分だけでしょうか? ノーコード、ノーコード、言うとりますが、全くコードを書かないわけでもないのに、ノーコード言うてるケースが多い事は問題にならんのか? 自分もワチャワチャと、言うとりますが、今回は比較的エンジニアリング作業でもてはやされる、クローリングとスクレイピングをサーバーレスで行うというお話。 ていうか、この間仕事でやった話をしたいと思います。 ノーコードツールとして無料で誰でも手軽に扱えて比較的かゆいところにまで手が届くツールといえば、 そう、「GoogleAppsScriot(GAS:ガス)」です。 今回は、GASを用いて、他のサイトの情報を取得して、データを取得してしまうまでの工程を紹介しておきます。

クローリングとスクレイピングって何?

クローリングって聞いたことあるけど、よくわからんという人、 スクレイピングって、モンブランケーキよりもおいしいかどうか、全くわからんという人、 耳をかっぽじって聞いて下さい。 ※知ってる人は、この節は読み飛ばしてください。

クローリングは、別サイトのHTMLを取得する事

インターネットブラウザでJavascriptを実行させると、別のドメイン(サードパーティドメイン)の情報は基本的にブロックされて取得できません。 なので、PHPやRubyと言った、サーバーサイドスクリプトに頼るしかありません。 CGIと言われるサーバーサイドスクリプト(コンパイル言語でも良いよ)で、URLから簡単にHTMLって取得できます。 この取得することをクローリングっていうんですね。 そして、Googleは昔からいろんなサイトのHTMLを取得しまくっていて、巨大なインターネット検索サイトを構築していますが、 Googleの事を、クローラーとも呼ぶことありますからね(聞いたことない?)。

スクレイピングは、クローリングしたHTMLからデータを抜き出す事

そして、クローリングして取得したHTMLから、中のデータ情報を取得することを、スクレイピングっていうですが、 具体的には、 競馬サイトをクローリングして、1着から3着の馬情報を取得する・・・ みたいな感じです。 株価情報サイトにいって、特定の銘柄の今現在の最新株価のみを取得するとか、 そういう事をスクレイピングって言うんです。

GASのクローリングが便利な点

HTMLを取得して、例えばPHPでスクレイピングしようとしたら、正規表現やら、文字列判定を行って、タグ分解したりする必要があります。 また、XML機能や、最近では、getElement系の命令なども入っていて、スクレイピングしやすくなっていますが、やっぱりJavascriptで処理したほうが便利です。 querySelectorを使ったり、いろいろな要素、属性関連の検索コマンドがもれなく多彩に付いていますからね。 という事で、GASは、クローリングに最適なんですよね。

GASのデメリット

とにかくスピードが遅い! バッチ処理のように、定期的に処理をして、データを貯めておくような使い方をすると比較的有効に使えますが、 リアルタイムにサイトのHTMLを取ってきて、それをスクレイピングするのは、なんとも遅いので、この点良く理解してから使いましょう。

GASでのクローリング方法

実際にGASでのクリーリングをする手順を備忘録しておきます。

GASに移動

https://script.google.com/

Yahooニュース

サンプルとして、Yahooニュースのページを取得してみます。 /** * Yahooニュース取得サンプル */ function myFunction() { const url = "https://news.yahoo.co.jp/" const res = UrlFetchApp.fetch(url) const html = res.toString() scraping(html) } ソースコードは上記をコピペします。 ポイントは、UrlFetchApp.fetch(url)で、URLの情報を取得することができます。 取得したデータは、html変数に格納しておいて、これをスクレイピングに渡します。

GASでのスクレイピング方法

取得したHTMLの分解方法サンプル。

DOM Parserライブラリの登録

ライブラリ横の+ボタンをクリック

1. 表示されたダイアログで、ライブラリIDを入力

1JTLPVXGW6Pq4zSAV5ED9XrWOPydVywumQZSOWN7l6KJ0UtWxtX3RbYO6

2. 検索ボタンを押す

3. 追加ボタンを押す

※認証やらが出るので、操作します。

コードの追加

function scraping(html){ const dom = HtmlParser.parse(html) const datas = dom.querySelectorAll(".topics a") for(const data of datas){ console.log(data.textContent) } }

実行

上部の実行ボタンを押すと、自動的にソースが保存されて、プログラムが走ります。 実行結果で、ニュースのトピック項目が一式取得できているのが分かります。

あとがき

今回は、サンプルでYahooニュースをスクレイピングしてみましたが、この方法で色々なサイトの情報をぶっこ抜くことが簡単にできますね。 これで仕事効率化バッチリじゃないですか?

参考ページ

https://qiita.com/kairi003/items/06fbf2dc8fb5415c7f60

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ