Как Вы анализируете плохо отформатированный файл HTML?

Вы используете тот же идентификатор, который получаете в своем действии, чтобы получить сообщение и его комментарии. Это неправильно, это просто идентификатор сообщения. Вы можете получить их, используя свой пост, например,

def show
  @post = Post.find(params[:id])
  @comments = Comment.where(post_id: @post.id)
end

или, лучше, если у вас есть comments ассоциация, определенная в вашей Post модели

def show
  @post = Post.find(params[:id])
  @comments = @post.comments
end
5
задан Charles Stewart 3 January 2010 в 12:28
поделиться

6 ответов

Можно передать источник страницы через опрятный для получения допустимой страницы. Можно найти опрятным здесь. Опрятный имеет привязку для большого количества языков программирования. После выполнения этого можно использовать любимый метод извлечения синтаксического анализатора/содержания.

8
ответ дан 18 December 2019 в 14:51
поделиться

Я рекомендовал бы Пакет Гибкости HTML. Это имеет способность работать с плохо структурированным HTML при предоставлении Вам Xml как использование выбора Xpath. Необходимо было бы все еще обработать по шаблону объекты или выбор с помощью различных выборов и проанализировать, но это получит Вас мимо плохого горба структуры.

2
ответ дан 18 December 2019 в 14:51
поделиться

Как упомянуто здесь и на другом ТАК ответы прежде, Красивый Суп может проанализировать странный HTML.

Красивый Суп является синтаксическим анализатором HTML/XML Python, разработанным для быстрых оборотных проектов как анализ экранных данных. Три функции делают это мощным:

  1. Красивый Суп не будет дросселировать, если Вы дадите ему плохо разметку. Это приводит к дереву синтаксического анализа, которое имеет приблизительно столько же смысла сколько Ваш оригинал документа. Это обычно достаточно хорошо для сбора данных, в которых Вы нуждаетесь и убегаете.
  2. Красивый Суп обеспечивает несколько простых методов и идиом Pythonic для навигации, поиска и изменения дерева синтаксического анализа: инструментарий для разделения документа и извлечения, в чем Вы нуждаетесь. Вы не должны создавать пользовательский синтаксический анализатор для каждого приложения.
  3. Красивый Суп автоматически преобразовывает входящие документы Unicode и исходящие документы UTF-8. Вы не должны думать о кодировке, если документ не указывает кодирование, и Красивый Суп не может автоматически обнаружить тот. Затем просто необходимо указать исходное кодирование.

Красивый Суп анализирует что-либо, что Вы даете ему, и делает материал обхода дерева для Вас. Можно сказать, что это "Находит, что все ссылки", или "Находят, что все ссылки класса externalLink", или "Находят все ссылки, URL которых соответствуют "foo.com", или "Находят заголовок таблицы, это имеет полужирный текст, затем дайте мне тот текст".

2
ответ дан 18 December 2019 в 14:51
поделиться

В зависимости от то, какие данные необходимо извлечь регулярные выражения, могло бы быть опцией. Я знаю, что много людей будет дрожать при мысли об использовании RegExes на структурированных данных, но простой факт (поскольку Вы обнаружили), что много HTML не на самом деле хорошо структурировано и может быть очень твердо проанализировать.

У меня была подобная проблема Вам, но в моем случае я только хотел одну определенную часть данных из страницы, которую было легко определить, не анализируя HTML, таким образом, RegEx работал очень приятно.

0
ответ дан 18 December 2019 в 14:51
поделиться

Используйте синтаксический анализатор HTML5 как html5lib.

В отличие от Опрятного HTML, это даст Вам обработку ошибок очень близко к тому, что делают браузеры.

1
ответ дан 18 December 2019 в 14:51
поделиться

Существует пара C# определенные потоки на этом, как Поиск C# синтаксический анализатор HTML.

0
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: