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?

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

More than 3 years have passed since last update.

はじめに

Headless Chromeというモノがあることを知り、これまでに PhantomJS でやってきたことの移植に手を付けようと思いました。
とりあえず、過去に作った「コミュニティサイクルの利用履歴をスクレイピング」をそのターゲットにしました。

やってみたこと

Python3 + BeautifulSoup4 + Selenium + headless Chrome です。
ChromeDriverをインストールすることをお忘れなく。

docomo-cycle-hc.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
from selenium.webdriver.chrome.options import Options

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

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1024,768')

driver = webdriver.Chrome(chrome_options=options)

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.XPATH, "//*[@id='pc_bill']")))
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-hc.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-hc.csvというファイルに出力されます。
なお、Mac環境とWindows環境で動作確認済みです。

今後のこと

とりあえず、PhantomJSでやってきたことをHeadless Chromeに移植することは難しくないので、移植に関する記事はこのくらいにして、別のことにチャレンジしたいと思います。

参考

Windows環境下でHeadless ChromeをPython3とSeleniumで動作させるキモ
コミュニティサイクルの利用履歴をスクレイピング v2

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