Очистите HTML с помощью C #

html html-agility-pack malformed screen-scraping

Вопрос

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


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

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

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

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

Принятый ответ

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

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

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

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

Avi


Популярные ответы

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow