スクレイピングあるある

f:id:whitech0c0late:20180407012745p:plain

もんだい

↑のようなDOMから、開始時間, 終了時間を抜き出すとします。

しかしながら、ちゃんと対応していないと1つの行だけ失敗してしまうようなことが稀に よくあります。なにかわかりますか??(ぱっと見てわかったらあなたは超上級スクレイパーです。)

こたえ

10:00〜10:30 テレビ東京系「特捜警察ジャンポリス生駒里奈

かいせつ

想定していたやつ

2.5.1 (main)> "18:55~21:54".split('')
=> ["18:55", "21:54"]

想定してなかったやつ

2.5.1 (main)> "10:00〜10:30".split('')
=> ["10:00〜10:30"]
2.5.1 (main)> '' == ''
=> false

2.5.1 (main)> ''.encode(Encoding::Shift_JIS)
Encoding::UndefinedConversionError: U+FF5E from UTF-8 to Shift_JIS

2.5.1 (main)> ''.encode(Encoding::Shift_JIS)
=> "\x{8160}"

かいけつ例

2.5.1 (main)> "10:00〜10:30".tr('', '').split('')
=> ["10:00", "10:30"]

gsub より tr のが速いっぽい

ちなみに

CSV でいろいろ対応とかするときも、絶対ハマるから encoding して へんなやつは replace するとかするとよいよね〜って話...でしたッ!