Неожиданная ошибка при использовании feedparser.py

Я имел большой успех при разборе RSS-каналов из Национального центра ураганов с помощью модуля feedparser:

import feedparser
feedparser.parse('https://www.nhc.noaa.gov/gis-at.xml') #Works Fine
feedparser.parse('https://www.nhc.noaa.gov/gis-ep.xml') #Works Fine

Однако, когда я пытаюсь прочитать внешне похожий канал из Центрально-Тихоокеанского центра ураганов, я генерирую KeyError:

feedparser.parse('http://www.prh.noaa.gov/cphc/gis-cp.xml') #Doesn't work

Это ошибка в feedparser? Неправильно ли кормлен CPHC? Есть ли вариант, который я забыл указать? Кажется, проблема в том, что нет ключа с именем "где", но я не знаю, почему это не проблема для каналов NHC. Стек воспроизводится ниже:

>>>  import feedparser
>>>  feedparser.parse('http://www.prh.noaa.gov/cphc/gis-cp.xml')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../anaconda3/lib/python3.6/site-packages/feedparser.py", line 3956, in parse
    saxparser.parse(source)
  File ".../anaconda3/lib/python3.6/xml/sax/expatreader.py", line 111, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File ".../anaconda3/lib/python3.6/xml/sax/xmlreader.py", line 125, in parse
    self.feed(buffer)
  File ".../anaconda3/lib/python3.6/xml/sax/expatreader.py", line 217, in feed
    self._parser.Parse(data, isFinal)
  File "/tmp/build/80754af9/python_1516124163501/work/Modules/pyexpat.c", line 414, in StartElement
  File ".../anaconda3/lib/python3.6/xml/sax/expatreader.py", line 370, in start_element_ns
    AttributesNSImpl(newattrs, qnames))
  File ".../anaconda3/lib/python3.6/site-packages/feedparser.py", line 2031, in startElementNS
    self.unknown_starttag(localname, list(attrsD.items()))
  File ".../anaconda3/lib/python3.6/site-packages/feedparser.py", line 666, in unknown_starttag
    return method(attrsD)
  File ".../anaconda3/lib/python3.6/site-packages/feedparser.py", line 1500, in _start_gml_point
    self._parse_srs_attrs(attrsD)
  File ".../anaconda3/lib/python3.6/site-packages/feedparser.py", line 1496, in _parse_srs_attrs
    context['where']['srsName'] = srsName
  File ".../anaconda3/lib/python3.6/site-packages/feedparser.py", line 356, in __getitem__
    return dict.__getitem__(self, key)
KeyError: 'where'

1 ответ

Я знаю, что это старый вопрос, но я сам столкнулся с этой проблемой и стал моим первым вкладом в открытый исходный код :)

Это ошибка фидпарсера?

Да, это было.

Корм CPHC искажен?

Также да, или, по крайней мере, это не следует модели GML GeoRSSS буквально. Если вы посмотрите описание GMLPoint , вы увидите следующую структуру:

      <georss:where>
  <gml:Point>
    <gml:pos>45.256 -71.92</gml:pos>
  </gml:Point>
</georss:where>

но данные фида структурированы следующим образом:

      <gml:Point>
  <gml:pos>45.256 -71.92</gml:pos>
</gml:Point> 

Вот почему KeyError: 'where'происходит из-за отсутствия whereярлык.

Это было исправлено на feedparserх 6.0.9исправление (см. https://github.com/kurtmckee/feedparser/pull/306)

Другие вопросы по тегам