
こんにちわ。 週末はWebサイト作成に力を入れている管理人の「ヒロユキ」と申します。
先週作成したフロントエンドテストツールのMockManに引き続きまして、また1週間で1サイトを作成することに成功しました!!
会社員をやっている関係で平日は21時頃までは何もできず、更にブログも作成しているという中で、1週間での作成を続けられているのは良い流れですね。
それも、現在勉強中のPythonが強力なスクレイピングのライブラリを持っているというのが大きいです。
新規作成したWebサイトの紹介とともに、Pythonを使用したスくらいピングの魅力についても書いていきたいと思います。
ブラウザゲーム人気ランキングの紹介
今回作成したサイトですが以下のサイトとなります。

昔の私はブラウザゲームのヘビーユーザーでして、特にDMMのゲームを5本程度掛け持ちでプレイしていました。
課金もある程度していたのですが、その際に重要視していたのがゲームの順位です。
50万円ほど課金したゲームがわずか2ヶ月で終わってしまったという経験があるからですw
そのため、自分が今プレイしているゲームの順位はどうかを必要以上に気にするようになっていきました。
これはゲームを快適にプレイする上でも重要な要素です。人気が上がらないゲームはアップデートなども滞るようになってくるため、快適にプレイするためにはある程度の人口は必要なのです。
(人気があるものを利用することが重要なのは、ゲームに限らず、SNSやコミュニティとかも一緒だと思います)
私以外のプレイヤーもゲームのランキングを重視している証拠として、GooglePlayの日本語版にのみランキング要素が非常に多いという事が挙げられます。

なんとゲームだけでランキングが3つも用意されていますw
ちなみに英語版ではゲームのランキングなどは見当たりませんでした。日本人は特に重要視するので、Googleが需要に合わせて特化させているのだと思います。
そんなわけで需要を見込んで、ゲームのランキングサイトを作ったわけですが、当該サイトの強みとしては、月間平均順位を記載しているという点になります。
ガチャの売上はアップデート有無などで大きく変わってしまうので、真に人気のゲームを見極めるには月次平均を見る必要があります。
しかし殆どのプラットフォームの順位は日次の順位のため、たまたま上位に来ているだけなのか、継続して強いゲームなのかを見極めることが難しいです。
そこで、月間平均順位ベースのランキングを作ってみたいと思った次第です。
新しくゲームを始めたいと思っている方が参考に見て頂けるようになれば、嬉しいですね。
スクレイピングは超おすすめです
ここまで調子よく紹介してきましたが、正直今回のはそこまで 集客はできるサイトではないと踏んでいます。
では何故作ったかというと…
作成を決めた時のtwitterで発信したとおり、スクレイピングの勉強をしたかっというのが大きいです。
何故なら、今後インターネットで活躍するようになる際にかならず役に立つスキルだと確信しているからです。
そもそも スクレイピング とは何かというところですが、wikiによると以下のように解説されています。
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。
Wikipediaより引用
要するに、「サイトから情報を部分的に抜き出して、抜き出した情報を再利用すること」です。
何故このスクレイピングを勉強したかったのかと言うと、 スクレイピング を使用することでキュレーションサイトを作成したり、トレンドを追いやすくなるからです。
スクレイピング を使用したサイトのアイデアをパッと考えてみると…
- オークションサイトの情報を集めて、お得な商品を見逃さないようにする
- ネット通販サイトの新着商品を取得し、トレンドをサーチする
- ネット上の商品の価格比較する
- Youtubeからインフルエンサーを抽出し研究対象にする
- Qiitaで人気ページを抽出し、最新の技術トレンドを把握
- 企業のIRページをスクレイピングして株価に影響しそうな情報をゲット
- 企業のセミナー情報を収集してセミナーに乗り遅れないようにする
色々面白いことができそうな気がしますよね。
この ス クライピングの技術を利用して圧倒的な地位を確立しているサイトも多いです。
indeed
就職業界大手のリクルートが運営するサービスです。企業の採用ページをスクレイピングして情報を取得することより、全国の企業の採用情報をサイトに集めています。
グノシー
NewsPicks
グノシーやNewsPicksなどのニュースキュレーションサイトも、各ニュースサイトよりニュースを取得しているので、スクレイピングを利用したサイトと言えるかと思います。
このように、既存のサイトの情報を集めるだけで人気サイトを作れてしまうというのがスクレイピングの魅力ですね。
スクレイピングにはPythonがおすすめです
スクレイピングをするにあたり、最もおすすめできるのがPythonによるスクレイピングになります。
非常に強力なDOM解析ライブラリである「Beautiful」を使用できるためです。
この辺は、以下のサイトなどが非常に参考になるかと思います。
実施に自分が使用しているコードも公開したいと思います。
https://github.com/namekoX/GameRanking-Batch
この中でメインの処理をしているのが以下のソースです。
https://github.com/namekoX/GameRanking-Batch/blob/master/lib/get_rank.py
rankings = soup.find_all('div', {'class': 'ranking'})
for ranking in rankings:
links = ranking.find_all('a')
for link in links:
if not 'ranking?' in link['href']:
linkslist.append(link['href'])
find_allというメソッドで特定のクラスのDOM要素だけを抜き出して配列に出来るので、後はこれをfor文でループしてDBに突っ込むだけという感じです。
HTMLがしっかりしているサイトであれば、これだけで何とかなってしまいそうな気がしますね。
気をつけたいこと
スクレイピングをするにあたり気をつけたいことが何点かあります。
- スクレイピングを禁止されているサイトも有る
- JavaScriptで動的に作成されたページに不利
- アクセスしすぎないようにする
スクレイピングを禁止されているサイトも有る
スクレイピングすることを禁止しているサイトもあります。自サイトが集めたデータを利用されてしまうわけですからね。
有名なのはtwitterでしょうか。 twitter で情報収集をしたい時は twitter APIを使用しなければいけません。
(そもそも twitter API が承認制な上に 審査が厳しい と噂なので手が出しにくいところです)
このようなサイトで無理矢理スクレイピングをしてしまうと必ずトラブルになるので気をつけないといけませんね。
JavaScriptで動的に作成されたページに不利
最近は仮想DOMを使用して描画スピードを上げるようなサイトが多いです。
自分もreactを使用しているのでわかるのですが、HTMLの構造がわからんのでスクレイピングはなかなか難しいですね。
一例として、自分が作ったブラウザゲームランキングのソースです。

当然ですがパッと見てわかりませんよね。
まあ、このページだけなら全然良いですが、動的にスクレイピングしようと思うと実HTMLがパッとわからないのは辛い。
素直にHTMLが書かれていないサイトが主流になってきたら、スクレイピングは難易度が高くなってくると思います。
アクセスしすぎないようにする
今回の自分のスクレイピングは1ページ取得して終了だったので良いのですが、「ページネーションがあるサイトなどのデータを全て取得する」とかなると半端ないアクセスが発生しますよね。
当然、連続でアクセスしすぎると相手サイトの負荷が高くなってしまうため、スクレイピングが認められているサイトにおいても考慮して使う必要があります。
例えば、大量のアクセスが見込まれる場合は「time.sleep()」を使用してアクセスごとに5秒程度休ませればよいかと思います。
その他にも
バッチが実行されるタイミングなども比較的長く設定する。
2回目以降は更新分だけ取得するようなロジックとする。
などが考えられるかと思います。
色々と注意条項もありますが、上手く行けば超有用なサイトを作成することも可能そうなので、私も積極的に使っていきたいと思います。