웹크롤링 한글 깨짐 질문이요.
조회수 4446회
class HomeController < ApplicationController
def index
require 'open-uri'
require 'nokogiri'
@url ="http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=030&aid=0002480868"
@page = Nokogiri::HTML(open(@url), nil, 'EUC-KR')
@title = @page.search("title").inner_html
@title_edit = @title.split(':')[0]
@content = @page.at_css('div.article_body').inner_html
end
end
위와 같이 코드를 짰는데요. 아래와 같이한글이 다 깨져서 나와요. 어떻게 해야 될지 모르겠어요.ㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
inner_html
대신에text
를 사용해 보세요.한글이 깨지는 원인은 클로링 한 문서의 인코딩은
EUC-KR
인데 크롤한 데이터를 읽어서 화면을 구성하는 쪽에서 사용하는 인코딩이UTF-8
이기 때문입니다.nokogiri
문서에 따르면,text
를 반환하는.text
등의 메소드는UTF-8
로 인코딩 된 문자열을 반환합니다.xml
을 반환하는.innerHTML
등의 메소드는 파싱에 사용된(위의 경우EUC-KR
) 인코딩으로 인코딩 된 데이터를 반환합니다.
따라서
inner_html
대신에text
메소드를 사용하시면 파싱된 데이터와 웹페이지에 사용하는 인코딩이 모두UTF-8
로 통일되기 때문에 문제가 해결됩니다.Strings are always stored as UTF-8 internally. Methods that return text values will always return UTF-8 encoded strings. Methods that return XML (like to_xml, to_html and inner_html) will return a string encoded like the source document.
댓글 입력