Feedparser: несоответствие entry.title
Я пытаюсь разобрать канал RSS с помощью feedparser.
Я получаю название так:
import feedparser
url = 'http://chem.aalto.fi/en/current/events/rss.xml'
feed = feedparser.parse(url)
for entry in feed.entries:
title = entry.title
print title
Обычно это работает без проблем, но я столкнулся со странным случаем. В этом конкретном фиде заголовки выглядят так:
<title>06.11.2015: Some title text</title>
Как и следовало ожидать, я иногда получаю:
06.11.2015: Some title text
... но иногда и это для того же предмета:
11/06/15: Some title text
Кто-нибудь сталкивался с подобной проблемой? Кажется, это совершенно случайно.
1 ответ
Это похоже на ошибку на стороне сервера. Я не видел канал раньше, но мне удалось увидеть оба формата даты в случайном порядке при использовании канала.
Если вашей целью является получение согласованной даты и названия событий, вы можете использовать дополнительные xcal
метаданные в этой ленте. Например, используя dateutil
:
import feedparser
import dateutil.parser
url = 'http://chem.aalto.fi/en/current/events/rss.xml'
feed = feedparser.parse(url)
for entry in feed.entries:
title = entry.title.split(": ", 1)[1]
start_time = dateutil.parser.parse(entry.xcal_dtstart)
end_time = dateutil.parser.parse(entry.xcal_dtend)
print("{} - {}: {}".format(start_time.date(), end_time.date(), title))
РЕДАКТИРОВАТЬ: Кроме того, что это стоит того, что RSS-канал, похоже, последовательно выводит заголовки в 06/15/16
формат при использовании http://chem.aalto.fi/en/current/events/rss.xml?format=rss и в 15.06.2016
форматировать при использовании http://chem.aalto.fi/en/current/events/rss.xml?format=atom для запроса.
Код, используемый для создания канала (на основе generator="FeedCreator 1.7.6(BH)"
в верхней части ленты) можно посмотреть по адресу https://github.com/ajslater/feedcreator/blob/master/include/feedcreator.class.php
Исходя из этого, я предполагаю, что библиотека Feedcreator имеет некоторые непреднамеренные побочные эффекты для основного кода, который генерирует заголовок записи, и этот побочный эффект, похоже, зависит от используемого формата канала. Если формат канала не указан явно в URL-адресе, это может быть (неправильно) использование некоторой кэшированной версии формата или всего содержимого канала. В любом случае, явная установка формата в URL, скорее всего, решит эту проблему для вас.