LoginSignup
8
7

More than 5 years have passed since last update.

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

Posted at

はじめに

昨日、「コミュニティサイクルの利用履歴をスクレイピング」という記事を書きました。本稿はそれの続きです。

やってみたこと

昨日の時点ではFirefoxを起動させてスクレイピングしていましたが、今回は昨日の「今後のこと」で述べていたようにPhantomJSに対応させてみました。
これまた、やってみたらとてもあっけなく完了しました。
そういうわけで、Python3 + BeautifulSoup4 + Selenium + PhantomJS という組み合わせでWindows環境で動作確認済みとなります。

docomo-cycle-pjs.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.PhantomJS()
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()

というわけで、昨日と違う箇所はwebdriverの記述だけですね。。。
昨日の時点では
driver = webdriver.Firefox()
だったのが
driver = webdriver.PhantomJS()
となっただけです。
注意点としましては、「ちゃんとPhantomJSがインストールされていて、パスが通っていること」ってことになるかと。

ちなみに、上記スクリプトの動作結果はこうなりました。
(昨日のCSVファイルと比較すると、履歴が2つ増えてますね!)

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)
8,2016/5/10 19:26,A3-02.カーサノーヴァショップ(楓ビル)A3-02.CASA NOUVA SHOP(Kaede Building),→,2016/5/10 19:48,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square)
9,2016/5/11 07:25,B4-03.桜の散歩道(晴海トリトンスクエア前)B4-03.Sakura no sanpomichi(In front of Harumi Triton Square),→,2016/5/11 07:45,A3-02.カーサノーヴァショップ(楓ビル)A3-02.CASA NOUVA SHOP(Kaede Building)

今後のこと

FirefoxをPhantomJSに変えただけで、動作がとてもスッキリしました。
Googleスプレッドシートへの自動追記であるとか、MySQLとかのDBにデータを格納するとか、そんなことをしておくと、よさそうですね。

参考

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

8
7
0

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
8
7