読者です 読者をやめる 読者になる 読者になる

ファイヤードブログ

ディジタル・パブリッシングという観点から、Webサイト制作、電子書籍制作などを。※ブログリニューアル中

Nokogiriでスクレイピングしてきた文字列に削除できない謎の空白が

Ruby

問題

 例えば日付をスクレイピングしてきて、それらの値が「 2014/12/10」のような文字列になっていたとする。先頭に空白があるのがわかる。この段階ではまだ文字列なので、次のようにして除去することを考える。

  date_str = ' 2014/12/10'
  date_str.tr!(' ','') # =>nil

 しかし、コメントにもある通りなぜかnilが返されてしまい、空白を除去できない。

解決

 ってことで、「cannot gsub space」とググってみたところ、発見しました。頼りにならないことの方が珍しいStack Overflowです。

stackoverflow.com

 原因は文字コードの違いでした。解決方法だけを書くと、今回のケースの「 2014/12/10」が含んでいる空白は、 による空白で、これを取り除くためには適切に正規表現を適用して取り除く必要があります。というわけで、上のコードを書き直すと、

  date_str = ' 2014/12/10'
  date_str.gsub!(/\u00a0/, '') # => '2014/12/10' 

 という風になり、これでちゃんと空白が取り除かれます。

 改めてスクレイピングしたサイトを訪れて、HTMLソースを確認すると、日付の周りに とあるのが確認できました。タグばっかりに目がいっていてあまり気にしていなかったようです。

関連