Чистый HTML с помощью C # - PullRequest
       57

Чистый HTML с помощью C #

1 голос
/ 18 ноября 2009

Как мне исправить искаженный HTML с помощью C #? Отличным ответом будет пример HTML Agility Pack!


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

Один из способов, которым я мог бы пойти, - это регулярные выражения. Я использовал Expression Web для анализа проблем и регулярных выражений, необходимых для их устранения. Поэтому одним из способов будет использование инструмента, такого как RegexBuddy , для генерации кода C # для этих регулярных выражений.

Однако рекомендуемым инструментом для обработки искаженного HTML в C # является HTML Agility Pack (HAP). Кроме того, я проанализировал только несколько страниц и боюсь, что на будущих страницах будут содержаться шаблоны, которые я еще не решил, и я не хотел бы входить в раздел «найди ошибки на следующих нескольких страницах и исправь их» бизнес. Так что, если у HAP уже есть надежное, всегда работающее решение, это было бы здорово. Проблема в том, что за исключением нескольких упоминаний здесь, в SO, я не смог найти никакой документации по использованию этого инструмента, за исключением файла справки объектного API.

Итак, прежде чем тратить $ и учиться на RegexBuddy (нет бесплатной ознакомительной версии) или сломать себе зубы на документации HAP API - есть ли простой способ сделать это? Пример HAP поможет ...: -)

Ответы [ 5 ]

2 голосов
/ 27 декабря 2009

Что я взял из ответов здесь: 1) Если вы очищаете веб-сайт, который не контролируете, вы всегда будете входить в режим обслуживания, при котором вам нужно будет починить скребок каждый раз, когда меняется макет страницы, которую вы очищаете. 2) Если вы ограничены этим известным сайтом, почему бы не написать свой скребок для решения проблем

Итак, если мне нужно перейти в режим обслуживания, это должно быть как можно проще. Поэтому мой процесс выглядит следующим образом:

  1. Я использую SWIxplorerAutomation Webius для обнаружения сцен на веб-страницах. Идея состоит в том, что сцена - это набор условий, которые вы определяете для IE. Когда веб-страница загружена, IE пытается увидеть, какой набор условий соблюден (например, заголовок страницы - «Вход в учетную запись», страница содержит текстовое поле «Логин» и текстовое поле «Пароль»). Если обнаружен набор условий, соответствующих сцене, IE сообщает, что сцена была обнаружена. Эта модель обеспечивает уровень абстракции - некоторые изменения на веб-странице могут привести к изменениям в файле сцены, избавляя код от необходимости изменений. Кроме того, это ограждает меня от модели IE, управляемой событиями: я называю «сцена». Я оцениваю этот продукт, но пока не уверен, что буду его использовать, главным образом потому, что документация ужасна. Другой альтернативой является Watin , и еще одна причина, по которой я еще не купил SWEA, - эта статья , обвиняющая автора в спаме против Ватина.
  2. После получения веб-страницы я использую Expression Web для запуска проверок совместимости и выявления ошибок.
  3. Я использую RegexMagic для удаления и исправления ошибок. Я действительно люблю этот инструмент. Конечно, иногда это приводит вас в ужасную злобу, потому что не позволяет вам делать то, что должно быть действительно легким, но это приятный и приятный инструмент, а документация просто потрясающая.
  4. Наконец, после того, как все ошибки, которые я знаю, были исправлены, я использую HTML-пакет Agility Pack для преобразования в XHTML - пересекая ts и ставя точки, так сказать: все строчные буквы, кавычки в атрибутах и ​​т. Д.

Надеюсь, это поможет!

Avi

2 голосов
/ 23 ноября 2009

Можете ли вы сказать мне, какие у вас неприятные проблемы?
но вам не нужно использовать регулярные выражения для очистки HTML, HAP позволит вам получить доступ к элементам искаженного HTML, используя Xpath Queries.
и в основном вам нужно изучить Xpath, чтобы узнать, как получить нужные HTML-элементы.
это действительно зависит от вида HTML, который вы анализируете с помощью HAP.
но есть несколько способов получить элементы.
например, по id или классу, или даже вы можете получить элемент, следующий за другим элементом, который содержит данный текст, например, «name:».
Вы можете перейти к W3 школам Xpath Tutorial для хорошего xpath урока

1 голос
/ 23 ноября 2009

Если вы очищаете веб-сайт, который не контролируете, вы всегда будете входить в режим обслуживания, при котором вам нужно будет починить скребок каждый раз, когда меняется макет страницы, которую вы очищаете. Не имеет значения, используете ли вы регулярное выражение

\ d + , чтобы получить большое красное число со страницы, или если вы используете парсер DOM, чтобы получить 3-ю ячейку в 2-й ряд в таблице с номерами идентификаторов, чтобы получить то же самое. Регулярное выражение прерывается, если веб-мастер заменяет атрибут цвета атрибутом класса. Парсер DOM ломается, если веб-мастер добавляет еще одну строку в начало таблицы.

Если вы очищаете большие части веб-страницы и хотите встроить их в свою собственную веб-страницу, вам может быть проще преодолеть ваше желание соответствовать веб-стандартам и просто дать браузеру понять, как отображать вещи.

1 голос
/ 23 ноября 2009

Поскольку вы используете Html Agility Pack и знаете о возникающих проблемах, если вы ограничены этим известным сайтом, почему бы не написать свой скребок для устранения проблем при загрузке HtmlDocument.

т.е .: Если вы знаете, что элемент всегда появляется после, вставьте элемент в первую дочернюю позицию тега .....

1 голос
/ 18 ноября 2009

Regex нельзя использовать для очистки HTML. http://tidy.sourceforge.net/ помогает?

...