Как преодолеть ошибку несоответствующего тега в модуле питона python - PullRequest
0 голосов
/ 29 января 2019

Я использую модуль python feedparse.py версии 5.2.1.при попытке прочитать каналы из usnews, например https://www.usnews.com/rss/the-report. Я получаю XML-файл с заголовком rss 2.0

feedparser возвращает 'status': 403, 'encoding': 'us-ascii', 'bozo_exception ': SAXParseException (' несоответствующий тег ',),' версия ':' '

Состояние 403 кажется ошибкой запроса, но предоставленное исключение является ошибкой синтаксического анализатора.Я хотел бы знать, есть ли обходной путь этой ошибки (например, изменение синтаксического анализатора 'строгость'

Спасибо

import feedparser
f = feedparser.parse('https://www.usnews.com/rss/news/the-run-2016',
                 agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36')

Выше приведен самый простой пример, показывающий ошибку. Я использовалfeedparser.py в течение нескольких месяцев в производственном приложении, это было только с примером и всеми каналами на usnews.com, где я обнаружил ошибку. Спасибо за просмотр.

Ошибка показана ниже:

{'feed': {}, 'entries': [], 'bozo': 1, 'headers': {'Server': 'AkamaiGHost', 'Mime-Version': '1.0', 'Content-Type': 'text/html', 'Content-Length': '301', 'Expires': 'Tue, 29 Jan 2019 17:10:37 GMT', 'Date': 'Tue, 29 Jan 2019 17:10:37 GMT', 'Connection': 'close', 'X-Origin': 'AWS-Brightspot', 'Set-Cookie': 'akacd_www=2177452799~rv=31~id=6f8f4ecea09b9abd4835d9ddd7c87ac8; path=/; Expires=Mon, 31 Dec 2038 23:59:59 GMT'}, 'href': 'https://www.usnews.com/rss/news/the-run-2016', 'status': 403, 'encoding': 'us-ascii', 'bozo_exception': SAXParseException('mismatched tag',), 'version': '', 'namespaces': {}}

news ---

Кроме того, мои браузеры быстро анализируют xml.

1 Ответ

0 голосов
/ 29 января 2019

Не углубляясь в то, что на самом деле происходит здесь (это, вероятно, проблема с feedparser или возвращенной проблемой кодирования), виновником здесь является включение agent в ваш экземпляр feedparser.Использование:

import feedparser
f = feedparser.parse('https://www.usnews.com/rss/news/the-run-2016')

облегчает вашу проблему здесь.Что касается того, почему, это заслуживает немного большего изучения.

...