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

ファイヤードブログ

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

【スクレイピング】フランス語、ドイツ語特有のアクセント記号がエラーを招く

Ruby pitfalls

 フランス語とドイツ語の不規則活用動詞の練習を、ブラウザゲームでいつか実現したい。本格的に着手するのは先になるけれど、スクレイピングの練習くらいは久しぶりにしておいた方がいいんじゃないかと思って、ちょっとだけ試してみた、、、が詰まった。スクリプトRubyで、Nokogiriというgemを使用しています。

# encoding: utf-8
require "open-uri"
require "rubygems"
require "nokogiri"

doc = Nokogiri::HTML(open("http://ja.wiktionary.org/wiki/être"))
doc.css('h1').each do |node|
  puts node.text
end

 なんだこの単純すぎるスクリプトは、とお怒りになるかもしれませんが、小さく動かしていくことを心がけているのでお許しを。h1はそのページの動詞を指定しています。そしてこのuriはフランス語のêtreのページのものです。このスクリプトがちゃんと動けば、ターミナルにはêtreと表示されるはずなのですが、実際は以下の用になってしまいます(前後のごちゃごちゃ書かれているものは省いてある)。

bad URI(is not URI?): http://ja.wiktionary.org/wiki/être (URI::InvalidURIError)

  êtreの「ê」以外にも、アクサン記号が入っている動詞は他のも同様のエラーがおきてしまいます。ドイツ語も「ä」などが入っていると、駄目ですね。
 ちなみに、「ê」に関しては、urlで「ê」のアクセント記号を無視して「e」とすれば、なぜかターミナルでは「être」が返されましたが、アクサンテギュではこの補正は通用しませんでした。
 現段階では解決策はわかりません。ググっても、自分の検索能力が低いのか、出てきません。stack overflowで「#encoding:utf-8にすればOK」みたいな書き込みもありましたが、関係ないようですね(sublime textを使っているので、日本語と同様にフランス語が検知されれば自動的に1行目に#encoding:utf-8が追加されるようになっていて、それでもできませんでしたから)。
 続く