Python
初心者

Pythonによるスクレイピング&機械学習のお勉強その2-3/2-4/2-5 - スクレイピング道場 / Web APIからのデータ取得 / cronと定期的なクローリング

今回の目標

このシリーズでは教科書(文献1)に沿ってPythonによるスクレイピングと機械学習を学びます。今回は第2章「高度なスクレイピング」から2-3「スクレイピング道場」、2-4「Web APIからのデータ取得」を学びます。
2-3「スクレイピング道場」ではWikipediaを題材にしてページのリンク一覧取得、URLの一覧を全ダウンロードする練習、tableタグを解析してCSVファイルに出力する方法等が解説されていますが、Wikipediaの規約上クローリングが禁止されているので擬似コードのみでした。概ね、2-1, 2-2で勉強したことで可能なのでこの節については読むだけとして、2-4節で類題をこなすことにします。2-5節はcronによる定期実行について解説されていますが、pythonの学習という個人的な目標から少し離れるためこの節も読むだけにします。

原則、教科書のサンプルプログラムを作成してゆきますが、著作権に配慮し、できるだけそのままではなく類題を作成して勉強してゆく方針です。

方法と結果

  • 準備

その0で作成した学習用docker環境でpythonの実行を行います。

$ docker run -t -i -v $HOME/src:$HOME/src pylearn2 /bin/bash

類題2-4 仮想通貨交換所の公開Web APIにアクセスする

教科書のサンプルプログラムはOpenWeatherMapで天気予報WebAPIにアクセスし、簡単な結果表示をするものでした。
今回は紹介されているWeb APIとは異なりますが、海外の仮想通貨交換所の公開Web APIから仮想通貨の情報をピックアップする類題を行いたいと思います。

api-cryptocurrency-cclef.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pylearn as pl
import random
import json

# Web APIの基本構造
API = 'https://www.cryptopia.co.nz/api/GetCurrencies'

#JSONデータからランダムにコイン情報をプリントする
def print_coininfo(jsonstring):

    #JSONデータのロード
    data = json.loads(jsonstring)
    #乱数を決める
    ran = random.randint(0, len(data['Data']))

    #取り出す
    coin = data['Data'][ran]
    print('+今回のピックアップコイン')
    print('| コイン名:', coin['Name'])
    print('| シンボル:', coin['Symbol'])
    print('| アルゴリズム:', coin['Algorithm'])

# APIにアクセスしてJSONデータを得る
def getJSON(URL):
    return pl.download(URL)

# メインプログラム

# 乱数の初期化
random.seed()

jsondata = getJSON(API)
print_coininfo(jsondata)

はい、Web APIといっても特にGETパラメータのないAPIだとURLベタ書きと同じですね。とりあえず練習なので難しいAPIは後回しにします。

  • 実行結果
$ python ./api-cryptocurrency-cclef.py
+今回のピックアップコイン
| コイン名: Nexus
| シンボル: NXS
| アルゴリズム: SHA3

ランダムにピックアップするようにしているので、メジャーなものから時には全然聞いたこともない仮想通貨も出てきたりします。

今回達成したこと

  • Web APIにアクセスしてJSONデータから情報を取り出す方法を学びました。

参考文献

  1. クジラ飛行机, Pythonによるスクレイピング&機械学習[開発テクニック], ソシム株式会社, 2016