Ruby - ウェブスクレイピング - 日本語を扱えるようにする
- 1. 概要
- 2. 対応
1. 概要
本項は「Ruby で日本語の URI(URL)をパーズするなら Addressable::URI を使おう」を参考にさせていただこうと思っていたところ。
「ruby の URI で日本語を含むURIに対応する。」でよいことが分かりました。
#!/usr/bin/env ruby
require 'open-uri'
require 'nokogiri'
begin
uri = URI.parse(ARGV[0])
html = OpenURI::open_uri(uri).read
html.sub!(/^<!DOCTYPE html(.*)$/, '<!DOCTYPE html>')
doc = Nokogiri::HTML(html)
puts "#{doc.title}"
rescue => error
puts "例外発生"
puts "#{error.backtrace}"
puts "[#{self.class.name}][#{error.message}]"
end
というソースで日本語の混じった URI を指定すると
> ./ソースファイル名.rb http://ja.wikipedia.org/wiki/日本
例外発生
["/usr/local/lib/ruby/2.4/uri/rfc3986_parser.rb:21:in `split'", "/usr/local/lib/ruby/2.4/uri/rfc3986_parser.rb:73:in `parse'", "/usr/local/lib/ruby/2.4/uri/common.rb:231:in `parse'", "./test03.rb:8:in `<main>'"]
[Object][URI must be ascii only "http://ja.wikipedia.org/wiki/\u65E5\u672C"]
エラーになっちゃうんです。
2. 対応
わざわざ、日本語対応用のモジュールは必要ありませんでした。
前項の parse の前に1手順 encode をかますだけでよいのでした。
#!/usr/bin/env ruby
require 'open-uri'
require 'nokogiri'
begin
uri = URI.encode(ARGV[0])
uri = URI.parse(uri)
html = OpenURI::open_uri(uri).read
html.sub!(/^<!DOCTYPE html(.*)$/, '<!DOCTYPE html>')
doc = Nokogiri::HTML(html)
puts "#{doc.title}"
rescue => error
puts "例外発生"
puts "#{error.backtrace}"
puts "[#{self.class.name}][#{error.message}]"
end
正常に動作します。
> ./ソースファイル名.rb http://ja.wikipedia.org/wiki/日本
日本 - Wikipedia
|
|