2014-12-29 6 views
1

북마크를 저장하기 위해 작은 앱으로 작업하고 있습니다. 나는 Nokogiri와 Pismo (별도)를 사용하여 웹 페이지를 크롤 링하여 제목 태그를 얻습니다.Nokokiri와 Pismo로 데이터 스크랩

Nokogiri는 일본어, 중국어, 러시아어 또는 다른 언어로 된 언어를 저장하지 않지만 Pismo는이 언어에서이 문자를 저장하지만 조금 느리고 Nokogiri는 제목 정보를 저장하지 않습니다. .

누구든지 더 나은 보석이나 그 데이터를 저장하는 더 좋은 방법을 추천 할 수 있습니까?

doc = Nokogiri::HTML(open(bookmark_params[:link])) 

@bookmark = current_user.bookmarks.build(bookmark_params) 
@bookmark.title = doc.title.to_s 

내가 "이상한 문자"

나는 페이지 제목

에 대한 youtube.com/watch?v=QXAwnMxlE2Q
를 스캔 아래 링크에서 노코 기리 사용하는 경우는 무엇을 의미하는 것입니다 이것이 내가 얻는 것입니다. 일본 æ ¥ ãã¬å¤äººè¡é ã¤ã³ã¿ãã ¥ 영어 ã¼에서

NTV 인터뷰 외국인 ...

그러나 이것은 내가 무엇을 얻을 피스모 보석을 사용하여. 일본

NTV 인터뷰 외국인 日 テ レ 外人 街頭 イ ン タ ビ ュ ー 영어 자막 英語 내가 원하는 실제 결과 인 字幕

. 그러나 보석은 약간 더 천천히있다.

+0

무엇 Nokogiri가 "별난"캐릭터를 저장하지 않는다는 것을 의미합니까?이것을 복제하는 최소한의 HTML 예제를 추가하십시오. 또한 문제를 나타내는 질문에 더 나은 제목을 제시 할 수 있습니까? 이는 사람들이 작업 할 질문을 선택하는 데 도움이됩니다. –

+0

의견을 추가하기보다는 해당 정보로 업데이트하십시오. 우리가 대답 할 때, 그것은 우리가 알아야 할 모든 것에 대해, 한 곳에서의 질문을 할 수있게하는 데 크게 도움이됩니다. 쉽게 읽을 수 있도록 포맷해야합니다. 고맙습니다. –

답변

0

Phrogz의 답변을 참조하십시오 : Nokogiri, open-uri, and Unicode Characters 나는 당신에게 일어난 일이 정확히 무엇인지 설명합니다. 요약하면, 어떤 이유로 open-url로 생성 된 IO 객체를 nokogiri로 전달하는 문제가 있습니다. 대신 문자열로 문서를 읽고 노코 기리에 그 줄 예 :

require 'nokogiri' 
require 'open-uri' 

open("https://www.youtube.com/watch?v=QXAwnMxlE2Q") {|f| 
    p f.content_type  # "text/html" 
    p f.charset   # "UTF-8" 
    p f.content_encoding # [] 
} 

doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q")) 
puts doc.title.to_s # => NTV interview foreigners in Japan æ¥ãã¬å¤äººè¡é ­ã¤ã³ã¿ãã¥ã¼ English Subtitles è±èªå­å¹ - YouTube 


doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q").read) 
puts doc.title.to_s # => NTV interview foreigners in Japan 日テレ外人街頭インタビュー English Subtitles 英語字幕 - YouTube 

당신은 내용이 항상 당신이 할 수 물론이에 UTF-8이 될 것입니다 알고있는 경우 :

doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q"), nil, "UTF-8") 
1

내 경험에 비추어 볼 때 Nokogiri 또는 RestClient 또는 기타 웹 스크랩 쥬얼리의 문제를 인코딩 할 때 문서에서 사용하는 인코딩을 찾는 것이 도움이됩니다.

이 정보는 일반적으로 메타 태그에 있습니다 : 실제 인코딩 태그가 제안과 다를 수 있으므로

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251"> 

이 항상 진실하지 않을 것이다, 그러나 당신이 찾을 수 있다면 그것은 시도 가치 전혀 메타 태그. 또는 몇 가지 다른 인코딩을 시도해 볼 수도 있습니다. 도울 수있는 명시 적 노코 기리의 인코딩을 설정,

doc.force_encoding('Windows-1251').encode('UTF-8') 
  • 을 또는 :

    1. 그리고 응답 수 :

      doc = Nokogiri::HTML(open-uri(http://example.com)) 
      

      을 시도

      doc = Nokogiri.XML(open-uri(http://example.com), nil, 'Windows-1251') 
      
  • 관련 문제