[PYTHON] Scraping des Nutzungsverlaufs des Community-Zyklus

Einführung

Persönlich benutze ich oft den Chuo-ku Community Cycle. Derzeit läuft das Bikecle Sharing Wide Area Experiment und 4 Stationen (Chuo Ward, Chiyoda Ward, Minato Ward) ・ Es ist ein sehr praktischer Mietzyklus, mit dem Sie frei zwischen (Koto Ward) hin und her fahren und ihn an einen anderen Fahrradhafen als den von Ihnen gemieteten zurückgeben können.

Was ich versucht habe

Sie können im Web überprüfen, wann, wo, wo Sie angekommen sind. Aber ich wollte dies automatisieren, also habe ich es mit Python3 + BeautifulSoup4 + Selenium + Firefox gemacht. Es wurde bestätigt, dass es in einer Windows-Umgebung funktioniert. (Zur Zeit habe ich mich in Chuo Ward registriert, es ist also ein Skript für Chuo Ward-Registranten.)

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 = "(Meine Benutzer-ID)"
PASSWORD = "(Mein Passwort)"

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

Wenn das obige Skript ausgeführt wird, wird der Verwendungsverlauf als docomo-cycle.csv ausgegeben. Es ist so.

docomo-cycle.csv


1,2016/5/2 07:22,B3-01.Chuo Ward Office B3-01.Chuo City Office,→,2016/5/2 07:35,A3-02.Casa Nova Geschäft (Kaede Gebäude) A3-02.CASA NOUVA SHOP(Kaede Building)
2,2016/5/2 18:29,A3-02.Casa Nova Geschäft (Kaede Gebäude) A3-02.CASA NOUVA SHOP(Kaede Building),→,2016/5/2 18:50,B4-03.Kirschblüten-Wanderweg (vor dem 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-Quadrat (Kiboricho-Dori) B3-03.Ginza 6-chome SQUARE(Kobikicho Dori),→,2016/5/5 21:48,B4-03.Kirschblüten-Wanderweg (vor dem Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square)
4,2016/5/6 07:28,B4-03.Kirschblüten-Wanderweg (vor dem Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/6 07:41,B2-02.Yanagi-dori (vor dem Tokyo Square Garden) B2-02.Yanagi-dori St. (In front of TOKYO SQUARE GARDEN)
5,2016/5/8 05:00,B4-03.Kirschblüten-Wanderweg (vor dem Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/8 05:08,H1-02.Toyosu Station H1-02.Toyosu Station
6,2016/5/9 07:25,B4-03.Kirschblüten-Wanderweg (vor dem Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/9 07:48,A3-02.Casa Nova Geschäft (Kaede Gebäude) A3-02.CASA NOUVA SHOP(Kaede Building)
7,2016/5/10 08:18,B4-03.Kirschblüten-Wanderweg (vor dem Harumi Triton Square) B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/10 08:40,A3-02.Casa Nova Geschäft (Kaede Gebäude) A3-02.CASA NOUVA SHOP(Kaede Building)

Zukunft

Unter dem Gesichtspunkt "automatisch" ist es sinnlos, Firefox zu starten und den Bildschirm zu ändern. Daher möchte ich PhantomJS oder etwas anderes verwenden, damit es geräuschlos funktioniert. Anschließend können Sie es rechtzeitig mit cron abkratzen oder automatisch zu Ihrer Google-Tabelle hinzufügen. .. ..

Referenz

"Web Scraping mit Python" O'Reilly Japan, ISBN978-4-87311-761-4 -Für die Konvertierung von CSV-Dateien habe ich auf [this] verwiesen (https://github.com/REMitchell/python-scraping/blob/master/chapter5/3-scrapeCsv.py).

Serpentin

Selbst in anderen Community-Zyklen als Chuo-ku, Tokio, scheinen sie von demselben System verwaltet zu werden. Sie können dies also möglicherweise tun, indem Sie die URL in der Zeile ** driver.get ** auf den folgenden Inhalt umschreiben.

・ Koto Ward  https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=4 ・ Chiyoda Ward  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äfektur Kanagawa West  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

Scraping des Nutzungsverlaufs des Community-Zyklus
Scraping Community Cycle Nutzungsverlauf PhantomJS-Version
Scraping das Ergebnis von "Schedule-Kun"
Die Verwendung von TensorBoard hat sich geringfügig geändert
Visualisierte den Nutzungsstatus der Spüle im Unternehmen
Organisieren Sie die grundlegende Verwendung von Autotools und pkg-config
Scraping der Gewinndaten von Zahlen mit Docker
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Da es viele Erdbeben gibt, erfahren Sie mehr über die Geschichte des Erdbebens
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Schätzen Sie die Gesamtspeicherauslastung eines Objekts grob ab
Der Beginn von cif2cell
Grundlagen der Python-Scraping-Grundlagen
Zusammenfassung der Verwendung von pyenv
Grundlegende Verwendung von Jinja2
Verwendung von Python-Einheimischen ()
der Zen von Python
Grundlegende Verwendung von SQL Alchemy
Die Geschichte von sys.path.append ()
Rache der Typen: Rache der Typen
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Scraping Excel-Datei der Liste der Geschäfte, die regionale gemeinsame Gutscheine verarbeiten
Scraping Mitgliederbilder von der offiziellen Website der Sakamichi Group
Erstellen Sie ein Korrelationsdiagramm aus dem Konversationsverlauf von Twitter