Nokogiri не читает / анализирует структуру HTML-файла в CentOS - PullRequest
2 голосов
/ 07 февраля 2012

Я написал скрипт для анализа необходимого кода в файлах HTML, которые загружаются в наше приложение. На OS X этот процесс работает нормально. Однако, когда я загружаю на наш тестовый сервер, это не так. Когда я захожу в консоль на тестовом сервере и пытаюсь проанализировать файл, Нокогири не видит структуру - каждый раз, когда я получаю одну строку вывода вместо всей структуры документа. Остальная часть моего сценария не выполняется, потому что Нокогири не просматривает документ. Нужна помощь в разрешении проблемы.

Вот необходимый код, который я использую, чтобы открыть файл и передать его в Nokogiri:

html = Nokogiri::HTML(File.open("index.html", "r"))

Вот что равен html:

#<Nokogiri::HTML::Document:0x10d9bbf0 name="document" children=[#<Nokogiri::XML::DTD:0x10d9b81c name="html">]>

В OS X я получаю все дерево, как и ожидалось.

Вот содержимое файла index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<link rel="stylesheet" href="zero.css" type="text/css" charset="utf-8" />
</head>
<body class="fullpage-vert" onunload="javascript:clearInterval(audioLoop);">
<div id="container">
    <div id="danceHolder">
        <img id="danceVid" src="1-1.jpg" width="320" height="480" alt="" />
    </div>
    <div id="introHolder">
        <img id="introVid" src="0-1.jpg" width="320" height="480" alt="" />
        <div id="ctabg"></div>
        <div id="cta1"></div>
        <div id="cta2"></div>
        <div id="cta3"></div>
        <div id="phone"></div>
        <div id="logo"></div>
    </div>
</div>
<a href="mmbridge:*">bridge test</a>
<frameset cols="25%,75%">
   <frame src="frame_a.htm" />
   <frame src="frame_b.htm" />
</frameset>
</body>
</html>

Например, когда я пытаюсь найти набор фреймов, я ничего не получаю:

html.css("frameset").size
0

Я знаю, что у Nokogiri есть проблемы с установленной по умолчанию версией Libxml2, установленной в CentOS (2.6.2), но я следовал инструкциям, чтобы установить ее на новую версию (2.7.8). Вот вывод для nokogiri -v:

# Nokogiri (1.5.0)
    --- 
    warnings: []

    nokogiri: 1.5.0
    ruby: 
      version: 1.9.2
      platform: x86_64-linux
      description: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
      engine: ruby
    libxml: 
      binding: extension
      compiled: 2.7.8
      loaded: 2.7.8

Кто-нибудь еще видел подобное поведение?

1 Ответ

1 голос
/ 07 февраля 2012

По какой-то причине замена

html = Nokogiri::HTML(File.open("index.html", "r"))

на

html = Nokogiri::HTML(File.read("index.html"))

работает, хотя теперь она не будет правильно рассчитывать номера строк (все это номер строки 0).

...