大学のバスの時刻表をスクレイピングする
はじめに
いま趣味で作ってるもので大学のバスの時刻表のデータがほしかったからスクレイピングした
スクレイピング対象
どんなデータが欲しいのか
- キャンパス発と駅着発とキャンパス着がカンマ区切りになったcsvファイル
- 扱う側でsplitなりで整形しやすいように
- 八王子の民なのでみなみ野のデータはなし
環境
- macOS Sierra 10.12.2
- Python 3.5.2
- BeautifulSoupを使った
BeautifulSoupをインストール
$ pip install beautifulsoup4
試行錯誤
ソースコード
出力
出力されたBusTimeTable.csvの上から10行目まで
問題点
- 複数行に渡ってるけど1行にしたい
- 備考欄がいらない
- シャトル運行の時間が
~,~,~,シャトル運行(約3~5分間隔)
となっている - 4列目に空白文字がありカンマで終わっていない
07:18,07:30,07:48,(空白)
改善したもの
ソースコード
出力
出力を一行にしたので途中まで
変更点
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でそれぞれを別のファイルにするのとどっちのが楽になるのか
Read other posts