はじめに

いま趣味で作ってるもので大学のバスの時刻表のデータがほしかったからスクレイピングした

スクレイピング対象

どんなデータが欲しいのか

  • キャンパス発と駅着発とキャンパス着がカンマ区切りになったcsvファイル
    • 扱う側でsplitなりで整形しやすいように
  • 八王子の民なのでみなみ野のデータはなし

環境

  • macOS Sierra 10.12.2
  • Python 3.5.2
  • BeautifulSoupを使った

BeautifulSoupをインストール

$ pip install beautifulsoup4

試行錯誤

ソースコード

gist.github.com

出力

出力されたBusTimeTable.csvの上から10行目まで

gist.github.com

問題点

  • 複数行に渡ってるけど1行にしたい
  • 備考欄がいらない
  • シャトル運行の時間が ~,~,~,シャトル運行(約3~5分間隔) となっている
  • 4列目に空白文字がありカンマで終わっていない
    • 07:18,07:30,07:48,(空白)

改善したもの

ソースコード

gist.github.com

出力

出力を一行にしたので途中まで

gist.github.com

変更点

1つ目

  • 16行目に以下を追加
writer = csv.writer(csvFile,lineterminator=',') 
  • lineterminatorは各行の終端する際に用いられる文字列で,未宣言時のデフォルトだと\r\nになる
  • lineterminatorにカンマをいれることで改行しないで一行のcsvファイルになる

2つ目

  • 21行目から32行目を以下に変更
for cell in row.findAll(['td', 'th']):
    text = cell.get_text()
    if(text == '~'):
        pass
    elif(text == ''):
        pass
    elif(text == '備  考'):
        pass
    else:
        csvRow.append(text)
        print(text)
writer.writerow(csvRow) 

  • if文の分岐でtextの中身がいらないものだったら pass でスキップする

おわりに

とりあえず想定していたcsvファイルを作ることはできたけど,現状のキャンパス発と駅着発とキャンパス着同じファイルにして使うプログラムでcsvを加工するのと,pythonでそれぞれを別のファイルにするのとどっちのが楽になるのか