Поиск:

Ответ в темуСоздание новой темы Создание опроса
> nokogiri кириллица 
:(
    Опции темы
RoRka
Дата 12.2.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.12.2009

Репутация: нет
Всего: нет



Немного модифицированный пример с сайта Nokogiri: 

Код

require 'rubygems'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.google.com.ua/search?q=ruby'))

doc.css('h3.r a.l').each do |link|
  puts link.content
end


Возникли проблемы с кириллицей. Помогите разобраться в чем дело. 

Код

doc = Nokogiri::HTML(open('http://www.google.com.ua/search?q=ruby'), nil, 'UTF-8')
 не помогает. 

PM MAIL   Вверх
bilbobagginz
Дата 12.2.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Цитата(RoRka @  12.2.2010,  10:34 Найти цитируемый пост)
Возникли проблемы с кириллицей.

а в чем именно - проблемы ?




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
RoRka
Дата 12.2.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.12.2009

Репутация: нет
Всего: нет



Некорректно отображается:
Код

Ruby Programming Language
Download Ruby
Ruby — ³ê³ïåä³ÿ
Ruby on Rails — ³ê³ïåä³ÿ
Ruby — Âèêèïåäèÿ
Ruby — Âèêèó÷åáíèê
Ruby On Rails in UA
HostPro (ÕîñòÏðî) - Õîñòèíã: Ruby-on-Rails
Ðåçþìå PHP, Ruby on rails developer | Ðåçþìå â Êèåâå
Ruby on Rails


Скорей всего гугл отдает не в UTF-8. Так как с другими сайтами проблем нет.
Как тогда определить кодировку?

Это сообщение отредактировал(а) RoRka - 12.2.2010, 13:00
PM MAIL   Вверх
bilbobagginz
Дата 12.2.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



RoRka
дело в том, что проблема может быть в 3-х местах:
  • самой программе (т.е. ты получаешь данные в неправильной кодировке)
  • локали (системной или пользовательской)
  • настройках программы эмулюции терминала
если у пользователя не указана локаль - используется системная.
если ты хочешь, чтобы все было в UTF-8, то проверь, что
  • пользовательская локаль установлена на UTF-8
  • локаль терминала тоже - UTF-8, и шрифт терминала поддерживает эту кодировку.
опиши как ты запускаешь программу, какая ОС, и т.д.

ну и ессно, ты же зависишь от способностей удаленных серверов, 
если удаленный сервер не умеет слать в UTF-8, 
то твои "кувырки" ничем не помогут.

ты можешь кстати попробовать определить кодировку автоматически.
я думаю через диапазоны кодировок (определись какие кодировки ты поддерживаешь, и перекодируй все в юникод).
самое сложное - определить точно в какой ты кодировке, а потом есть iconv


Это сообщение отредактировал(а) bilbobagginz - 12.2.2010, 16:00


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
RoRka
Дата 12.2.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.12.2009

Репутация: нет
Всего: нет



Похоже проблема все же в сервере. Локаль настроена в UTF-8. Да и с другими сайтами таких проблем нет. 
Пример. На следующий код:
Код

require 'rubygems'
require 'nokogiri'
require 'open-uri'

  puts "----- GOOGLE ------"
  doc = Nokogiri::HTML(open('http://www.google.com.ua/search?q=ruby'))
  doc.css('h3.r a.l').each do |link|
    puts link.content
  end

  puts "------ YANDEX ------"
  doc = Nokogiri::HTML(open('http://yandex.ua/yandsearch?p=&text=ruby&lr=145'))
  doc.css('a.cs').each do |link|
    puts link.content
  end

Такой вот результат:
Код

----- GOOGLE ------
Ruby Programming Language
Download Ruby
Ruby — ³ê³ïåä³ÿ
Ruby on Rails — ³ê³ïåä³ÿ
Ruby — Âèêèïåäèÿ
Ruby — Âèêèó÷åáíèê
Ruby On Rails in UA
HostPro (ÕîñòÏðî) - Õîñòèíã: Ruby-on-Rails
Ruby on Rails
Ruby (programming language) - Wikipedia, the free encyclopedia
------ YANDEX ------
Ruby — Википедия 
Ruby Programming Language 
Ruby on Rails - Веб-разработка с удовольствием 
Ruby — Викиучебник 
Ruby On Rails in UA 
[Ruby-Doc.org: Documenting the Ruby Language] 
Язык программирования Ruby 
Forum List - Ruby Forum 
Ruby on Rails 
ruby.su 


Интересно, что с Mechanize таких проблем не возникает:
Код

require 'rubygems'
require 'mechanize'
  class GooglePars < Mechanize
    def process
        get 'http://www.google.com.ua/search?q=ruby'
        page.links.each do |link|
           if link.attributes['class'] == "l"
               puts "#{link.text}"
           end
        end
   end
 end
GooglePars.new.process

Результат:
Код

Ruby Programming Language
Download Ruby
Ruby — Вікіпедія
Ruby on Rails — Вікіпедія
Ruby — Википедия
Ruby — Викиучебник
Ruby On Rails in UA
HostPro (ХостПро) - Хостинг: Ruby-on-Rails
Ruby on Rails
Ruby (programming language) - Wikipedia, the free encyclopedia

PM MAIL   Вверх
bilbobagginz
Дата 13.2.2010, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



попробуй кодировку вставить в стринг запроса у гугла,
(так по крайней мере мой браузер делает):
Код

  puts "----- GOOGLE ------"
  doc = Nokogiri::HTML(open('http://www.google.com.ua/search?q=ruby&ie=UTF-8'))
  doc.css('h3.r a.l').each do |link|
    puts link.content
  end

ты же делаешь запрос в украинский филиал.
На сервере гугл в Украине стоит какая-то украинская кодировка "по умолчанию",
что вполне логично.

насчет механизатора - посмотри какой именно запрос он высылает, и какую строку запроса конструирует.
не удивляйся, если у механизатора для гуглы по умолчанию выставлена кодировка юникодом.




Это сообщение отредактировал(а) bilbobagginz - 13.2.2010, 09:00


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Fortop
Дата 13.2.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



Цитата(bilbobagginz @  13.2.2010,  07:56 Найти цитируемый пост)
На сервере гугл в Украине стоит какая-то украинская кодировка "по умолчанию",
что вполне логично.

Не логично ни разу

http://www.google.com.ua/#q=ruby&fp=1
Все в UTF возвращается.

Пусть посмотрит User-Agent, который передается в запросах.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
bilbobagginz
Дата 13.2.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Fortop, user-agent это правильно...там ведь тоже кодировка есть.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Fortop
Дата 13.2.2010, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



bilbobagginz, я бы и рад тебя обрадовать, да нечем - нет там кодировки.
Скорее всего он просто определяет по браузеру как отдавать.

Код

GET /search?q=ruby&fp=1&cad=b HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, */*
Referer: http://www.google.com.ua/
Accept-Language: uk-UA
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; MRSPUTNIK 2, 2, 0, 164; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.google.com.ua
Connection: Keep-Alive



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
bilbobagginz
Дата 13.2.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Fortop, ну я не знаю, пускай RoRka расскажет сам что он там накопал, и помогает ли ему в запросе просить кодировку....


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
RoRka
Дата 14.2.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.12.2009

Репутация: нет
Всего: нет



Такой вот код не помог:
Код

require 'rubygems'
require 'nokogiri'
require 'open-uri'

HEADERS = {
    'Host'            => 'www.google.com.ua',
    'User-Agent'      => 'Mozilla/5.0 (X11; U; Linux i686; ru; rb:1.9.2) Firefox/3.0.6',
    'Accept'          => 'text/html,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language' => 'uk-UA',
    'Accept-Charset'  => 'utf-8',
    'Keep-Alive'      => '300',
    'Connection'      => 'keep-alive',
    'Cache-Control'   => 'max-age=0'
}

  puts "----- GOOGLE ------"
  doc = Nokogiri::HTML(open('http://www.google.com.ua/search?q=ruby&ie=UTF-8', HEADERS))         
  doc.css('h3.r a.l').each do |link|
    puts link.content
  end


Но вариант с Mechanize мне очень даже подходит, поэтому в дальнейших "плясках" смысла не вижу. Спасибо, что пытались помочь.
PM MAIL   Вверх
bilbobagginz
Дата 15.2.2010, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



RoRka, где-то я видел, что можно было сделать force_encoding = 'utf-8'
но если ты нашел другое решение - флаг тебе в ласты smile



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
niksan
Дата 4.5.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.9.2009
Где: Воронеж

Репутация: нет
Всего: нет



я через Iconv делал у себя
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.