6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コミュニティサイクルの利用履歴をスクレイピング

Posted at

#はじめに
個人的に(東京の)中央区コミュニティサイクルをよく利用しています。
現在、自転車シェアリング広域実験というのを実施中で、4区(中央区・千代田区・港区・江東区)を自由に行き来したり、借りた場所とは異なるサイクルポートに返却ができたりするとても利便性の高いレンタサイクルです。

#やってみたこと
「いつ、どこからどこに乗ったんだっけ?」ということはWebで確認できるのですが、このあたりのことを自動化したいなーと思い、Python3 + BeautifulSoup4 + Selenium + Firefox で作ってみました。Windows環境で動作確認済みです。
(とりあえず、私は中央区で登録しているので、中央区登録者向けのスクリプトになっています)

docomo-cycle.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import urllib.request
from bs4 import BeautifulSoup
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
import csv

MEMBERID = "(自分のユーザID)"
PASSWORD = "(自分のパスワード)"

driver = webdriver.Firefox()
driver.get("https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=2")

mid = driver.find_element_by_name('MemberID')
mid.send_keys(MEMBERID)
password = driver.find_element_by_name('Password')
password.send_keys(PASSWORD)
password.send_keys(Keys.RETURN)

obj1 = WebDriverWait(driver,5).until(
    EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Billing")))
obj1.click()

time.sleep(3)

data = driver.page_source.encode('utf-8')
soup = BeautifulSoup(data, "html.parser")

table = soup.findAll("table",{"class":"rnt_ref_table"})[0]
rows = table.findAll("tr")

csvFile = open("docomo-cycle.csv", 'wt', newline='', encoding='utf-8')
writer = csv.writer(csvFile)
try:
  for row in rows:
    csvRow = []
    for cell in row.findAll(['td', 'th']):
      csvRow.append(cell.get_text().replace('\n',''))
    writer.writerow(csvRow)
finally:
  csvFile.close()

driver.close()

上記スクリプトを実行すると、利用履歴が docomo-cycle.csv として出力されます。
こんな感じです。

docomo-cycle.csv
1,2016/5/2 07:22,B3-01.中央区役所B3-01.Chuo City Office,→,2016/5/2 07:35,A3-02.カーサノーヴァショップ(楓ビル)A3-02.CASA NOUVA SHOP(Kaede Building)
2,2016/5/2 18:29,A3-02.カーサノーヴァショップ(楓ビル)A3-02.CASA NOUVA SHOP(Kaede Building),→,2016/5/2 18:50,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square)
3,2016/5/5 21:32,B3-03.銀座6丁目-SQUARE(木挽町通り)B3-03.Ginza 6-chome SQUARE(Kobikicho Dori),→,2016/5/5 21:48,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square)
4,2016/5/6 07:28,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/6 07:41,B2-02.柳通り(東京スクエアガーデン前)B2-02.Yanagi-dori St. (In front of TOKYO SQUARE GARDEN)
5,2016/5/8 05:00,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/8 05:08,H1-02.豊洲駅H1-02.Toyosu Station
6,2016/5/9 07:25,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/9 07:48,A3-02.カーサノーヴァショップ(楓ビル)A3-02.CASA NOUVA SHOP(Kaede Building)
7,2016/5/10 08:18,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/10 08:40,A3-02.カーサノーヴァショップ(楓ビル)A3-02.CASA NOUVA SHOP(Kaede Building)

#今後のこと
「自動」って視点からするとFirefoxが立ち上がって画面遷移していくのは無駄な動作なのでPhantomJSとかを使ってサイレントに動作させてみたいと思います。そして、cronとかで定時にスクレイピングさせるとか、Googleスプレッドシートに自動追記させるとか。。。

#参考
『PythonによるWebスクレイピング』オライリー・ジャパン、ISBN978-4-87311-761-4
・CSVファイル化についてはこれを参考にさせていただきました。

#蛇足
東京都中央区以外のコミュニティサイクルであっても、同じシステムで管理されているっぽいので、driver.get行のURLを以下の内容に書き換えると同じことができるかも知れません。

・江東区
 https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=4
・千代田区
 https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=1
・港区
 https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=3
・横浜
 https://tcc.docomo-cycle.jp/cycle/YKH/cs_web_main.php
・仙台
 https://tcc.docomo-cycle.jp/cycle/SND/cs_web_main.php
・広島
 https://tcc.docomo-cycle.jp/cycle/HRS/cs_web_main.php
・神奈川県西
 https://tcc.docomo-cycle.jp/cycle/KNS/cs_web_main.php
・甲州
 https://tcc.docomo-cycle.jp/cycle/KSH/cs_web_main.php
・神戸
 https://tcc.docomo-cycle.jp/cycle/kob/cs_web_main.php

6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?