Сопоставить записи RSS с текстом HTML. W. неточный поиск

Как бы вы решили эту проблему?

Вы копируете HTML блогов. Некоторым HTML-кодом блога являются сообщения в блоге, некоторые из них - форматирование, боковые панели и т. Д. Вы хотите иметь возможность определить, какой текст в HTML-документе принадлежит какому-либо сообщению (то есть постоянная ссылка), если таковые имеются.

Я знаю, о чем вы думаете: вы можете просто посмотреть RSS и вообще игнорировать HTML! Тем не менее, RSS очень часто содержит только очень короткие выдержки или удаляет ссылки, которые могут вас заинтересовать. Вы хотите по существу победить выдержку RSS, используя вместе HTML и RSS одной и той же страницы.

RSS-запись выглядит так:

заглавие
выдержка из почтового тела
Постоянная ссылка

Сообщение в блоге в HTML выглядит так:

название (возможно, в окружении постоянной ссылки)
...
Постоянная ссылка, может быть
...
почтовое тело
...
Постоянная ссылка, может быть

Таким образом, HTML-страница содержит те же поля, но расположение постоянной ссылки заранее неизвестно, и поля будут разделены неким шумовым текстом, который в основном представляет собой HTML и пробел, но также может содержать некоторые дополнительные метаданные, например, опубликованные Джонни. "или дата или что-то в этом роде. Текст также может быть немного отличен в HTML и RSS, как описано ниже.

Дополнительные правила / предостережения:

  • Названия не могут быть уникальными. Это происходит чаще, чем вы думаете. Примеры, которые я видел: "Сводка новостей по понедельникам", "TGIF" и т. Д.
  • Названия могут быть даже оставлены пустыми.
  • Выдержки в RSS также необязательны, но предполагается, что должен быть хотя бы непустой отрывок или непустой заголовок
  • Отрывок RSS может содержать полный контент поста, но, скорее всего, содержит короткий отрывок начала тела поста.
  • Предположим, что постоянные ссылки должны быть уникальными и одинаковыми как в HTML, так и в RSS.
  • Заголовок, выдержка и текст сообщения могут быть немного по-разному отформатированы в RSS и HTML. Например:
    • У RSS может быть HTML внутри заголовка или разделенного тела, или на странице HTML может быть добавлено больше HTML (например, окружение первой буквы тела сообщения чем-либо) или форматирование может быть немного другим
    • Текст может кодироваться немного по-другому, например, быть utf8 в RSS, в то время как не HTML-символы в HTML всегда кодируются с использованием амперсанда. Однако предположим, что это текст на английском языке, где символы, отличные от ascii, встречаются редко.
    • Там может быть плохо закодированная Windows-1252 ужас. Это часто случается с символами, такими как кавычки. Тем не менее, можно с уверенностью предположить, что большая часть текста является ascii.
    • Там может быть случай сгиба в любом направлении, особенно в названии. Таким образом, они могут вводить заглавные буквы на HTML-странице, но не в RSS.
  • Количество записей в ленте RSS и странице HTML не должно совпадать. Либо может быть больше или меньше старых записей. Мы можем ожидать только получить те сообщения, которые появляются в обоих.
  • RSS может отставать. На странице HTML может появиться новая запись, которая пока не отображается в ленте RSS. Это может произойти, если RSS-канал распространяется через Feedburner. Опять же, мы можем ожидать разрешения только тех сообщений, которые появляются как в RSS, так и в HTML.
  • Тело сообщения может быть очень коротким или очень длинным.

100% точность не является ограничением. Однако чем точнее, тем лучше.

Ну, что бы вы сделали?

возникли проблемы с выходом в первые пара абзацев. Редактировать?
Triptych 19.12.2008 16:11:01
переписал интро, мы надеемся , что это немного яснее
ʞɔıu 21.12.2008 03:45:31
2 ОТВЕТА

RSS на самом деле довольно просто анализировать с помощью XPath любого синтаксического анализатора XML (или регулярных выражений, но это не рекомендуется), вы просматриваете теги <item>, ища <title>, <link>, <description>.

Затем вы можете опубликовать их как разные поля в базе данных или напрямую объединить их в HTML. Если <описание> отсутствует, вы можете очистить ссылку (один из способов - сравнить несколько страниц, чтобы отсеять части макета HTML).

0
14.12.2008 10:42:52

Я бы создал скребок для каждого из основных движков блогов. Начните с основного текста для одного сообщения на странице.

Если вам повезет, то движок предоставит разумный XHTML, так что вы можете найти ряд полезных выражений XPath, чтобы получить узел, соответствующий статье. Если нет, то я боюсь, что это TagSoup или Tidy, чтобы привести его в правильно сформированный XML.

Оттуда вы можете искать метаданные и полный текст. Это должно безопасно удалить верхние / нижние колонтитулы / боковые панели / виджеты / рекламные объявления, хотя они могут оставить встроенные объекты и т. Д.

Также должно быть довольно легко (TM) сегментировать страницу на метаданные статьи, текст, комментарии и т. Д. И т. Д. И помещать их в довольно разумный элемент RSS / Atom.

Это послужит основой для получения RSS-канала (неполного текста) и его преобразования в полнотекстовый (следуя постоянным ссылкам, указанным в официальном RSS).

Как только у вас появится скребок для движка блога, вы можете начать писать детектор - то, что будет основой для «данной страницы, с каким блогом она была опубликована».

При наличии достаточного количества скребков и детекторов должна быть возможность указать конкретный канал RSS / Atom и преобразовать его в полнотекстовый канал.

Однако этот подход имеет ряд проблем:

  • в то время как вы можете быть в состоянии ориентироваться на большие 5 блоговых движков, могут быть некоторые блоги, которые вам просто нужны, но не охваченные ими: например, в Википедии есть 61 движок ; Люди, которые пишут свои собственные движки для блогов, нуждаются в собственном скребке.
  • каждый раз, когда движок блога меняет версии, вам нужно менять детекторы и скребки. Точнее, нужно добавить новый скребок и детектор. Детекторы должны становиться все более суетливыми, чтобы различать одну версию одного и того же движка и следующую (например, каждый раз, когда меняется слэш-код , он обычно меняет HTML, но разные сайты используют разные версии слеша).

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

1
28.01.2009 19:54:00