Friction River Software

  • お問い合わせ

Webスクレイピングの説明(会話風)

A子

インターネット上に公開されている色んな情報を自動的にゲットしたい!

B美

うわっ、びっくりした…

突然なんなのよ

C菜

Webページの中から特定の情報を自動抽出するってことじゃないですか~?

つまりはスクレイピングです~

A子

ん?
すくれいぴんぐって言うの?

いや、電話営業をかける相手として、ネット上から社名や住所、電話番号なんかを集めたいと思ってね
リストを作りたいんだけど、一社一社、手作業でExcelにコピペしていくのも大変だし、自動化できないかと…

B美

なるほど

うーん、『静的ページ』は簡単なんだけど、『動的ページ』の場合、ちょっと難しいのよね

C菜

私もその違いは分からないです~

B美部長、教えてくださいです~

B美

分かったわ

良い機会だから、Web系の基礎から講義してあげましょう
A子、あんたも聴きなさいね

A子

くっ、藪蛇か…

いや、私は別に要らないかな(汗)

C菜

社長~、最初に話題を振った当事者なんですから、ダメですよ~

一緒にB美部長のお話を聴くです~♪



B美

ではあらためて講義を始めます

二人ともWeb、正確にはWWWの仕組みは分かってるわよね?

C菜

World Wide Webワールド ワイド ウェブの略で、「世界中に張り巡らされた蜘蛛の巣」って意味です~

A子

えっ?そうなの?
ホームページのことだと思ってたよ

B美

いえ、それで合ってるわ

まぁ正しくは「Webページ」って言うんだけどね

C菜

ホームページって、あるWebサイトの中で最初に表示されるページ(トップページ)のことです~

もう一つ、ブラウザを起動したときに最初に表示されるページって意味もありますけど~

B美

まぁ、とにかくここでは「Webページ」という呼び方で統一するわね

EdgeエッジChromeクロームなんかのブラウザソフトはWebサーバに対して、「○○というファイルが欲しい」という要求リクエストを行うの
したらWebサーバは応答レスポンスとして、その○○というファイルを送ってきてくれるってわけ

あとは、その○○というファイルを解析してきれいに表示するのはブラウザソフトの役目ね

A子

Webページ内にある写真やイラストなんかの画像ファイルも一緒に埋め込まれてるの?

B美

違う、違う

画像ファイルはリンクとして記述されてるだけよ
ブラウザソフトがHTMLファイルを解析した結果、画像ファイルへのリンクが見つかったら、その画像ファイルを要求リクエストするってわけ

あ、これはブラウザソフトが裏で勝手にやってるから、ユーザは意識しなくて良いわよ

A子

HTMLってなんだっけ?
なんか聞いたことはあるのよね

C菜

Hyperハイパー Textテキスト Markupマークアップ Languageランゲージ」の頭文字をとったものです~

Webページを記述するための言語ですよ~

A子

ん?Makeupメーキャップ

B美

Markupマークアップだっつーてんだろ

日本語では「印をつける」的なニュアンスの言葉ね
要するに、普通の文章に「タグ」と呼ばれる印をつけて、色々と修飾するってことよ

C菜

で、話は戻りますけど『静的ページ』って何なんですかぁ~?

B美

そのHTMLファイル内に記述されている情報が全てであるってWebページのことよ

でも、HTMLファイル内に記述されていない情報がブラウザソフト上に表示されるときがあるのよ
それが『動的ページ』ってことね

A子

また、わけの分からんことを…

ファイル内には存在しないのに、いったいどこから持ってきてるのよ

B美

もちろんWebサーバからに決まってるじゃない

JavaScriptジャバスクリプトって聞いたことない?

C菜

ブラウザ上でプログラムを実行するときに使うプログラム言語です~

A子

あー、Javaジャバだったら聞いたことがあるかも…

B美

C菜正解、A子は不正解!

JavaジャバJavaScriptジャバスクリプト全くの別物
てか、そもそも作った会社が違うわね

C菜

JavaジャバSun Microsystemsサン・マイクロシステムズ社で、JavaScriptジャバスクリプトNetscapeネットスケープ社だった気がします~

B美

さっすがC菜ね

一つだけ補足しておくならば、現在のJavaジャバの版権はOracleオラクル社に移ってるんだけどね

A子

で、そのJavaScriptジャバスクリプトというプログラム言語で作られたプログラムがブラウザ上で実行されて、その結果WebサーバからHTMLファイルに書かれていない情報を取ってくる

…そういう認識でOK?

B美

大正解!
なかなか分かってるじゃない

でもね
WebサーバからHTMLファイルを取得するのは簡単なんだけど、JavaScriptジャバスクリプトによって埋め込まれるはずの情報はそのHTMLファイルをブラウザソフト上に読み込ませないと取得できないのよ

C菜

あ~、分かりました~

たしかにJavaScriptジャバスクリプトのプログラムって、ブラウザ上でしか実行できませんからね~

B美

だからスクレイピングするときにその対象となるWebページが『動的ページ』だった場合、ちょっとひと手間必要なのよね
(端的に言えば面倒くさい…)

C菜

そんなにたくさん『動的ページ』ってあるですか~?

B美

あまり意識したことがないからよく分からないけど、少なくともみずほ銀行の『宝くじの当せん番号案内』のページがそうみたいよ

第○○回(抽せん日:●●)の当せん番号が××で、当せん金額が△△円って場合、「○○」「●●」「××」「△△」の部分がJavaScriptジャバスクリプトによって動的に埋め込まれるデータってことになるわね

A子

なんで抽選や当選の「選」の字がひらがなの「せん」なのよ

B美

いや、みずほ銀行のWebページがそうなってたから(笑)

別に深い意味は無いわ

A子

うーん、まぁ良いか…

あ、そういえば、スクレイピングって英語よね?
どういう意味なの?

C菜

えっとですね~

たしか「けずる」とか、そんな意味だったような気がします~

B美

そうね
あと、「こする」って意味もあるかな

ニューヨークの超高層ビル群を摩天楼まてんろう、英語ではSkyscraperスカイスクレイパーって言うわよね
まさに空をこすっているかのような高いビルって意味ね

Webスクレーピングの場合は、HTMLファイルの中から不要な情報をけずり取って、必要なデータのみを取得するって意味で使われてるみたい

A子

なるほどねぇ

で、どうなの?
スクレイピングするプログラムって作れそう?

B美

作るのは、まぁ問題ないわ

ただ、Webサイトによってはスクレイピングを禁止しているところもあるから注意してね

A子

ん?なんで?

B美

そうねぇ

例えば、あるWebページ内に別ページへのリンクが10件あって、【次へ】というリンクもあったと仮定しましょう
スクレイピングのソフトがその10件のリンク先情報をすべてたどって情報を取得、さらには【次へ】もたどっていくわけよ
んで、【次へ】をたどって表示されたページにさらにリンクが10件あった場合、どうなると思う?
(もちろんその10件のリンクもたどっていくわ)

あ、さらにそこにも【次へ】リンクがあったら、継続的にたどっていくわよ
(【次へ】というリンクが表示されなくなるまでね)

C菜

それって、すごく短い時間の中でたくさんの要求リクエストが行われて、Webサーバに大きな負荷をかけちゃうんじゃないでしょうか~?

B美

そうなのよ
下手したらDoSドス攻撃だって誤解されるかも…(笑)

C菜

サービス拒否攻撃ですか~?

B美

そう
Denial-of-Serviceデナイアル・オブ・サービス」を略して「DoSドス」ね(「Denial」は「拒否」の意)

短時間に大量の要求リクエストを送信することで、そのWebサーバのサービス提供を妨害する攻撃のことよ

A子

そっかぁ
結構、気を遣わなきゃいけないってことね

あ、そういえば『FRS統合サービス』の中に「Webページからテキストデータを抽出」って機能があったよね
あれってどうなの?

B美

あー、あれはあんまり実用的なサービスじゃないわね

「こんなこともできますよ」「本格的なスクレイピングについては別途ご相談ください」…って感じのデモンストレーションっぽい機能みたい

例えば、『宝くじの当せん番号案内』の2024年9月分のページなんだけど、二つのクラス(js-lottery-date-pc及びjs-lottery-number-pc)を指定することで日付と当選番号を取得できるわ
ただし、このページって『動的ページ』だから、お試しユーザでは利用できないんだけどね

B美

このWebサイト(宝くじの当せん番号案内)の全てのリンクをたどって自動的に過去の全データを取得しようとしたりすると、人間にとってはめっちゃ楽だけど、Webサーバから見たらDoSドス攻撃になっちゃうってわけ

まぁ、『FRS統合サービス』にその機能は無いんだけどね

C菜

あっ、そうだ!

WebAPIウェブエーピーアイって言葉を最近よく聞くんですけど、それって何なんですかぁ~?

B美

あるWebサイトが外部に公開したい情報(データ)は、事前に用意されたURLを叩くことで簡単に取得できるって機能よ

そのときのデータ形式がJSONジェイソンだったりすることが多いから、とても扱いやすいのよね

A子

13日の金曜日?

B美

殺人鬼のジェイソンちゃうわ!

JavaScript Object Notationの頭文字を取ったデータ書式フォーマットの一つでね
色んなプログラム言語から簡単に取り扱えるのよ

そうね、「小説家になろう」(通称「なろうサイト」)というWebサイトの中から、投稿された小説の情報をゲットするための「なろう小説API」というWebAPIがあるわよ
(クリックすると別ウィンドウで開きます)

C菜

うわぁ~!
すごいです~

本来はスクレイピングするんじゃなくて、WebAPIを使って効率的に情報をゲットすべきなんでしょうね~

B美

まぁ、全てのWebサイトがWebAPIを用意してくれてるわけじゃないから、スクレイピングの需要はまだまだあるんだけどね

A子

うーん、なんとなくは理解したわ

総括すると
・スクレイピングはWebサーバに負荷をかけないように慎重に行う
・スクレイピングを禁止しているサイトに対してはスクレイピングを行わない
・WebAPIが公開されているサイトだったら、スクレイピングではなくWebAPIを利用する
…ってことでOK?

B美

そういうこと

あと、これは本当にどうでも良いんだけど…
JSONジェイソンから映画「13日の金曜日」を連想するって、あんた本当は何歳なのよ(笑)

登場人物紹介ページはこちら