Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

個人的に(東京の)中央区コミュニティサイクルをよく利用しています。
現在、自転車シェアリング広域実験というのを実施中で、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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away