Kickstarterをスクレイピングしてプロジェクトの進捗を調べる

クラウドファンディングのプラットフォーム「Kickstarter」のプロジェクトページをスクレイピングして、資金調達の進捗を調べてみます。

スクレイピングに使うツールは、いつもと同じ、PythonとBeautiful Soupです。

  • Python(2.7.5)
  • Beautiful Soup(4.4.0)

Beautiful Soupの詳しい使い方については、公式ドキュメントを参照してください。

Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation

今回は、日本の会社が関わっている「niXaX」という製品のプロジェクトページのスクレイピングを行います。

niXaX – Special Gadget for Steak Lovers! by Joel Berger, Yoshiharu Cutlery Co., Ltd. — Kickstarter

niXaX

Kickstarterの各プロジェクトページには、上の図の黄色で囲んだ部分のように、プロジェクトの進捗を示している場所があります。ここから金額を抽出して、プロジェクトの進捗を調べます。

該当部分のソースコードを抜き出すと、こんな感じになっています。

<div class="col col-12 mb1 stat-item">
<div class="num h1 bold nowrap" data-goal="8000.0" data-percent-raised="0.817625" data-pledged="6541.0" id="pledged">
<data class="Project483747213" data-currency="USD" data-format="shorter_money" data-precision="0" data-value="6541" data-without_code="true" itemprop="Project[pledged]">$6,541</data>
<span class="money usd project_currency_code"></span>
</div>
<span class="bold h5">
pledged of <span class="money usd no-code">$8,000</span> <span class="mobile-hide">goal</span>
</span>
</div>

良く見ると、div class=”num h1 bold nowrap”の中にdata-goal=”8000.0″ 、data-percent-raised=”0.817625″、およびdata-pledged=”6541.0″という使えそうな属性が入っていることがわかります。この3つの属性値を取得してあげれば良さそうです。

Beautiful Soupのfindメソッドを使って”num h1 bold nowrap”クラスを取り出し、さらにgetメソッドでそれぞれの属性値を抽出します。

こんな感じのコードでできます。

# -*- coding: utf-8 -*-

import urllib2
from bs4 import BeautifulSoup

# KickstarterのプロジェクトページをBeautiful Soupでパース
url = u"https://www.kickstarter.com/projects/403476566/nixax-the-worlds-most-user-friendly-steak-tenderiz"
html = urllib2.urlopen(url)
soup = BeautifulSoup(html, "lxml")

# プロジェクトページの進捗部分をresultに格納
result = soup.find("div", class_="num h1 bold nowrap")

# 目標の金額を取得
if result.get("data-goal").replace('.', '', 1).isdigit():
    goalValue = float(result.get("data-goal"))
# 進捗を取得
if result.get("data-percent-raised").replace('.', '', 1).isdigit():
    progressValue = float(result.get("data-percent-raised"))
# 現在の金額を取得
if result.get("data-pledged").replace('.', '', 1).isdigit():
    currentValue = float(result.get("data-pledged"))

# 結果を出力
print "目標の金額(ドル):" + str(goalValue)
print "達成度(%):" + str(progressValue)
print "現在の金額(ドル):" + str(currentValue)

以下の箇所は、抽出した値がfloat型であることの確認、および文字列のfloat型へのキャストを行っています。やはり、数字はfloat型で持っておきたいものです。

if result.get("data-goal").replace('.', '', 1).isdigit():
    goalValue = float(result.get("data-goal"))

今回は、必要なデータがソースコード内に整備されていたので、比較的容易にスクレイピングできました。

Kickstarterをスクレイピングしてプロジェクトの進捗を調べるスクリプト on GitHub

Kickstarterをスクレイピングしてプロジェクトの進捗を調べるスクリプトの最新版は、GitHub上で公開しています。このコードを使っていただいたら、ついでにGitHubのフォロー、スターをしていただけると励みになります!

Kickstarterをスクレイピングしてプロジェクトの進捗を調べるスクリプト on GitHub

シェアしてもらえるとうれしいです。゚(´っωc`)゚。