2013-04-10 2 views
0

Я просто пытаюсь проксировать сайт с помощью синтаксического анализа, используя nokogiri.Nokogiri потеряет атрибуты

Мой контроллер действия

des show 
    @url    = 'http://www.femmeactuelle.fr/' 
    @with_nokogiri  = Nokogiri::HTML(open(@url).read).to_html 
    @without_nokogiri = open(@url).read 

    if params.has_key? :nokogiri 
    render text: @with_nokogiri, layout: false 
    else 
    render text: @without_nokogiri, layout: false 
    end 
end 

Если я использую это действие с ? Nokogiri = обув, тело теряет идентификатор. Любая идея по какой причине? Я просто хочу тот же html, что и браузер, после разбора с nokogiri.

+0

Можете ли вы пояснить, что вы подразумеваете под «потерянием id»? Какой результат вы видите, и чего вы ожидаете? – PinnyM

+0

Я обновил вопрос. – Awea

+0

Все еще не следует за вами, можете ли вы опубликовать фрагмент HTML того, что вы видите, что выглядит неправильно/отличается и что вы ожидаете от него? – PinnyM

ответ

2

Я не могу дублировать проблему с Nokogiri, лишая параметр id из тега <body> в допустимом HTML. Вот мои Nokogiri/Libxml и Рубиновые сведения:

nokogiri: 1.5.9 
ruby: 
    version: 1.9.3 
    platform: x86_64-darwin10.8.0 
    description: ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin10.8.0] 
    engine: ruby 
libxml: 
    binding: extension 
    compiled: 2.7.7 
    loaded: 2.7.7 

Вот простой тест Nokogiri:

doc = Nokogiri::HTML('<html><body id="foo">bar</body></html>') 

puts doc.to_html 

Возвращает:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body id="foo">bar</body></html> 

Когда я анализирую 'http://www.femmeactuelle.fr/', errors метод возвращает Nokogiri в ряд ошибок, в том числе в <head> и <body>. Nokogiri пытается исправить документ, когда он сломан, что может привести к перемещению тегов или, как я подозреваю, в этом случае параметры теряются.

Validating the document возвращает всевозможные ошибки, поэтому я думаю, что проблема лежит за пределами Нокигири. Если вы хотите попытаться исправить это, прежде чем передавать его в Nokogiri, вы можете отправить файл через HTMLTidy, а затем посмотреть, сможет ли Nokogiri лучше понять это. В противном случае, потратьте некоторое время на копание через HTML, выясните, что сломано, и напишите некоторый код манипуляции с строкой, чтобы исправить его.

Вы не можете сравнить источник страницы, которую браузер отображает с помощью анализатора, например, Nokogiri. Это очень разные фрагменты кода, с очень разными целями. Браузер хочет сделать страницу рендерингом что-то, и имеет всевозможные спады для работы со сломанным HTML. Парсер этого не делает, потому что его задача состоит в том, чтобы точно перевести HTML или XML в его истинную структуру, чтобы мы могли ее прорвать.

Смежные вопросы