[PYTHON] Gratter l'historique d'utilisation du cycle communautaire

introduction

Personnellement, j'utilise souvent le Cycle communautaire Chuo-ku. Actuellement, Expérience de partage de vélos sur une large zone est en cours, et 4 quartiers (Chuo Ward, Chiyoda Ward, Minato Ward) ・ C'est un cycle de location très pratique qui vous permet de faire des allers-retours librement entre (Koto Ward) et de le rendre à un port cyclable différent de celui que vous avez loué.

Ce que j'ai essayé

Vous pouvez vérifier "quand, où, où en êtes-vous?" Sur le Web, mais je voulais automatiser cela, alors je l'ai fait avec Python3 + BeautifulSoup4 + Selenium + Firefox. Il a été confirmé qu'il fonctionne dans un environnement Windows. (Pour le moment, je me suis inscrit à Chuo Ward, donc c'est un script pour les inscrits Chuo Ward)

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 = "(Mon ID utilisateur)"
PASSWORD = "(Mon mot de passe)"

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()

Lorsque le script ci-dessus est exécuté, l'historique d'utilisation sera affiché sous la forme docomo-cycle.csv. C'est comme ça.

docomo-cycle.csv


1,2016/5/2 07:22,B3-01.Bureau B3 du quartier Chuo-01.Chuo City Office,→,2016/5/2 07:35,A3-02.Boutique Casa Nova (bâtiment Kaede) A3-02.CASA NOUVA SHOP(Kaede Building)
2,2016/5/2 18:29,A3-02.Boutique Casa Nova (bâtiment Kaede) A3-02.CASA NOUVA SHOP(Kaede Building),→,2016/5/2 18:50,B4-03.Sentier des cerisiers en fleurs (devant Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square)
3,2016/5/5 21:32,B3-03.Ginza 6-chome-CARRÉ (Kiboricho-dori) B3-03.Ginza 6-chome SQUARE(Kobikicho Dori),→,2016/5/5 21:48,B4-03.Sentier des cerisiers en fleurs (devant Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square)
4,2016/5/6 07:28,B4-03.Sentier des cerisiers en fleurs (devant Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/6 07:41,B2-02.Yanagi-dori (devant Tokyo Square Garden) B2-02.Yanagi-dori St. (In front of TOKYO SQUARE GARDEN)
5,2016/5/8 05:00,B4-03.Sentier des cerisiers en fleurs (devant Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/8 05:08,H1-02.Station Toyosu H1-02.Toyosu Station
6,2016/5/9 07:25,B4-03.Sentier des cerisiers en fleurs (devant Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/9 07:48,A3-02.Boutique Casa Nova (bâtiment Kaede) A3-02.CASA NOUVA SHOP(Kaede Building)
7,2016/5/10 08:18,B4-03.Sentier des cerisiers en fleurs (devant Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/10 08:40,A3-02.Boutique Casa Nova (bâtiment Kaede) A3-02.CASA NOUVA SHOP(Kaede Building)

Futur

Du point de vue "automatique", il est inutile de démarrer Firefox et de changer d'écran, donc j'aimerais utiliser PhantomJS ou quelque chose pour le faire fonctionner en silence. Ensuite, cron ou quelque chose comme le scraping à temps, ou l'ajout automatique à une feuille de calcul Google. .. ..

référence

"Web Scraping with Python" O'Reilly Japan, ISBN978-4-87311-761-4 -Pour la conversion de fichier CSV, j'ai fait référence à this.

Serpentin

Même dans les cycles communautaires autres que Chuo-ku, Tokyo, il semble qu'ils soient gérés par le même système, vous pourrez donc peut-être faire de même en réécrivant l'URL dans la ligne ** driver.get ** au contenu suivant.

・ Koto Ward  https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=4 ・ Quartier Chiyoda  https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=1 · Minato-ku  https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=3 · Yokohama  https://tcc.docomo-cycle.jp/cycle/YKH/cs_web_main.php ・ Sendai  https://tcc.docomo-cycle.jp/cycle/SND/cs_web_main.php · Hiroshima  https://tcc.docomo-cycle.jp/cycle/HRS/cs_web_main.php ・ Préfecture de Kanagawa Ouest  https://tcc.docomo-cycle.jp/cycle/KNS/cs_web_main.php ・ Koshu  https://tcc.docomo-cycle.jp/cycle/KSH/cs_web_main.php ・ Kobe  https://tcc.docomo-cycle.jp/cycle/kob/cs_web_main.php

Recommended Posts

Gratter l'historique d'utilisation du cycle communautaire
Scraping de l'historique d'utilisation du cycle de la communauté Version PhantomJS
Grattage du résultat de "Schedule-kun"
L'utilisation de TensorBoard a légèrement changé
Visualisation de l'état d'utilisation de l'évier dans l'entreprise
Organisez l'utilisation super basique des Autotools et de pkg-config
Gratter les données gagnantes de Numbers à l'aide de Docker
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
Puisqu'il y a beaucoup de tremblements de terre, obtenez l'histoire du tremblement de terre
Prenez note de la liste des utilisations de base de Pandas
L'édition définitive du grattage python! (Site cible: grande caméra)
J'ai essayé de gratter la publicité du site de dessin animé piraté
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Estimer grossièrement l'utilisation totale de la mémoire d'un objet
Le début de cif2cell
Principes de base du grattage Python
Résumé de l'utilisation de pyenv
Utilisation de base de Jinja2
Utilisation des locaux Python ()
le zen de Python
Utilisation de base de SQL Alchemy
L'histoire de sys.path.append ()
La vengeance des types: la vengeance des types
Essayez de gratter les données COVID-19 Tokyo avec Python
Obtenez l'identifiant d'un GPU avec une faible utilisation de la mémoire
Grattage du fichier Excel de la liste des magasins gérant des coupons communs régionaux
Gratter les images des membres du site officiel du groupe Sakamichi
Créer un diagramme de corrélation à partir de l'historique des conversations de Twitter