Python
scraping
CryptocurrencyCalendar

Crytocurrency Calendarをスクレイピング1

Crytocurrency Calendarという仮想通貨の情報サイトをスクレイピングします。

動機

なぜネットに書いてあるのに、わざわざスクレイピングするかというと、複数の仮想通貨を管理する際に、Crytocurrency Calendar側のサイトで情報を管理するのは厳しいからです。毎日のようにエベントやハードフォーク、Airdropが開かれるなかで、それぞれの数日前に仕込んでいても、管理している通貨が10種類以上あると、いつイベントがあるかを忘れてしまい、いちいちサイトを覗きにいかないといけません。 でも予めスクレイピングでローカルに保存しておき、Excelシートに自分の見やすいようにインプットしたり、スマホやメールで通知機能を実装すれば、仮想通貨の管理が簡単になりますよね。このような経緯でCrytocurrency Calendarをスクレイピングすることに決めました。

ソースコード

import requests
import lxml.html

r = requests.get("https://coinmarketcal.com/")
html = r.text
root = lxml.html.fromstring(html)

time_of_event = root.xpath(
    "/html/body/main/div[3]/section[1]/div[2]/div[3]/article[1]/div/h5[1]/strong")
print(time_of_event[0].text.strip())
#strip()で出力結果の前後の空白を抜け出す
title_of_event = root.xpath(
    "/html/body/main/div[3]/section[1]/div[2]/div[3]/article[1]/div/h5[2]/strong")
print(title_of_event[0].text.strip())
sort_of_event = root.xpath(
    "/html/body/main/div[3]/section[1]/div[2]/div[3]/article[1]/div/h5[3]")
print(sort_of_event[0].text.strip())
content_of_event = root.xpath(
    "/html/body/main/div[3]/section[1]/div[2]/div[3]/article[1]/div/div[1]/p[2]")
print(content_of_event[0].text.strip())

実行結果

15 March 2018
Burst (BURST)
Hard Fork
Dynamic block size and transaction fees, PoC2 protocol, partial Dymaxion code... The fork is planned to happen around block 470 000.

解説

XPathでHTMLから要素を抜き出しました。Google Chromeから指定のXPathを抜き出すことができます。

xpath.gif
XPathを使う上で注意することは、配列の添え字が0からはじまることでなく1から始まることです。XPathはGoogle Chromeを使うことで抜き出すことができますが、完全なXPathでなく、そのまま使うことはできません。なので自分で補う必要があります。
 サイトでは数十個のエベントがありますが、このソースコードでは1個のエベントしか抜き出すことしかできません。次回ではXPathの指定を工夫して1つのページからすべてのイベントを抜き出してみます。

参考にした書籍

Pythonによるクローラー&スクレイピング入門 設計・開発から収集データの解析・運用まで