feedparser выходит из строя во время запуска скрипта, но не может воспроизводиться в интерактивной консоли python

Это не удается с этим, когда я запускаю затмение или когда запускаю свой скрипт в iPython:

'ascii' codec can't decode byte 0xe2 in position 32: ordinal not in range(128) 

Я не знаю почему, но когда я просто выполняю оператор feedparse.parse (url), используя тот же URL-адрес, нет ошибки. Это сильно меня поражает.

Код такой же простой, как:

  try: d = feedparser.parse(url) except Exception, e: logging.error('Error while retrieving feed.') logging.error(e) logging.error(formatExceptionInfo(None)) logging.error(formatExceptionInfo1()) 

Вот трассировка стека:

 d = feedparser.parse(url) File "C:\Python26\lib\site-packages\feedparser.py", line 2623, in parse feedparser.feed(data) File "C:\Python26\lib\site-packages\feedparser.py", line 1441, in feed sgmllib.SGMLParser.feed(self, data) File "C:\Python26\lib\sgmllib.py", line 104, in feed self.goahead(0) File "C:\Python26\lib\sgmllib.py", line 143, in goahead k = self.parse_endtag(i) File "C:\Python26\lib\sgmllib.py", line 320, in parse_endtag self.finish_endtag(tag) File "C:\Python26\lib\sgmllib.py", line 360, in finish_endtag self.unknown_endtag(tag) File "C:\Python26\lib\site-packages\feedparser.py", line 476, in unknown_endtag method() File "C:\Python26\lib\site-packages\feedparser.py", line 1318, in _end_content value = self.popContent('content') File "C:\Python26\lib\site-packages\feedparser.py", line 700, in popContent value = self.pop(tag) File "C:\Python26\lib\site-packages\feedparser.py", line 641, in pop output = _resolveRelativeURIs(output, self.baseuri, self.encoding) File "C:\Python26\lib\site-packages\feedparser.py", line 1594, in _resolveRelativeURIs p.feed(htmlSource) File "C:\Python26\lib\site-packages\feedparser.py", line 1441, in feed sgmllib.SGMLParser.feed(self, data) File "C:\Python26\lib\sgmllib.py", line 104, in feed self.goahead(0) File "C:\Python26\lib\sgmllib.py", line 138, in goahead k = self.parse_starttag(i) File "C:\Python26\lib\sgmllib.py", line 296, in parse_starttag self.finish_starttag(tag, attrs) File "C:\Python26\lib\sgmllib.py", line 338, in finish_starttag self.unknown_starttag(tag, attrs) File "C:\Python26\lib\site-packages\feedparser.py", line 1588, in unknown_starttag attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] File "C:\Python26\lib\site-packages\feedparser.py", line 1584, in resolveURI return _urljoin(self.baseuri, uri) File "C:\Python26\lib\site-packages\feedparser.py", line 286, in _urljoin return urlparse.urljoin(base, uri) File "C:\Python26\lib\urlparse.py", line 215, in urljoin params, query, fragment)) File "C:\Python26\lib\urlparse.py", line 184, in urlunparse return urlunsplit((scheme, netloc, url, query, fragment)) File "C:\Python26\lib\urlparse.py", line 192, in urlunsplit url = scheme + ':' + url File "C:\Python26\lib\encodings\cp1252.py", line 15, in decode return codecs.charmap_decode(input,errors,decoding_table) 

ЧАСТИЧНО РЕШЕННО:

Это можно воспроизвести, когда URL-адрес, передаваемый в файл feedparser.parse (), является unicode. Он не будет воспроизводиться, если это URL-адрес ascii. И для записи вам нужен фид, в котором есть символы символа Юникода высокого характера. Я не знаю, почему это так.

  • Feedparser - загрузка старых сообщений из Google Reader
  • Неполное чтение с помощью httplib
  • Разбор разных форматов дат из feedparser в python?
  • Как проанализировать «<media: group>» с помощью feedparser?
  • Библиотека парсеров RSS-ленты в Python
  • Django rss feedparser возвращает фид без «заголовка»,
  • 2 Solutions collect form web for “feedparser выходит из строя во время запуска скрипта, но не может воспроизводиться в интерактивной консоли python”

    Похоже, что URL-адрес, который дает вам проблему, содержит текст с некоторым кодированием (например, латинский-1, где 0xe2 будет «нижний регистр с кружком сверху» aka &acirc; ) без правильного заголовка содержимого (он должен иметь charset = в Content-Type: но не).

    Если это так, то feedparser не может угадать кодировку, пытается по умолчанию ( ascii ) и терпит неудачу.

    эта часть документов feedparser объясняет проблемы более подробно.

    К сожалению, для решения этой общей проблемы нет «волшебных пуль» (из-за бозонов, нарушающих правила XML). Вы можете попытаться поймать это исключение, а в обработчике прочитать содержимое url отдельно (используйте urllib2 ) и попытаться декодировать их с различными возможными кодировками – тогда, когда вы, наконец, получите полезный объект юникода таким образом, подайте это в feedparser.parse (чей первый arg может быть URL-адресом, файловым потоком или строкой unicode с данными).

    Со ссылкой на комментарий OP: Попробуйте любой литерал url, например u'myfeed.blah / xml «Он должен воспроизводиться.

     >>> from pprint import pprint as pp >>> import feedparser >>> d = feedparser.parse(u'myfeed.blah/xml') >>> pp(d) {'bozo': 1, 'bozo_exception': SAXParseException('not well-formed (invalid token)',), 'encoding': 'utf-8', 'entries': [], 'feed': {}, 'namespaces': {}, 'version': ''} >>> d = feedparser.parse(u'http://myfeed.blah/xml') >>> pp(d) {'bozo': 1, 'bozo_exception': URLError(gaierror(11001, 'getaddrinfo failed'),), 'encoding': 'utf-8', 'entries': [], 'feed': {}, 'version': None} >>> d = feedparser.parse("http://feedparser.org/docs/examples/atom10.xml") >>> d['bozo'] 0 >>> d['feed']['title'] u'Sample Feed' >>> d = feedparser.parse(u"http://feedparser.org/docs/examples/atom10.xml") >>> d['bozo'] 0 >>> d['feed']['title'] u'Sample Feed' >>> 

    Пожалуйста, перестаньте обманывать; укажите URL-адрес, который действительно вызывает проблему.

    Python - лучший язык программирования в мире.