Форум сайта python.su
пытаюсь написать парсер фидов c помощью feedparser'a при обработки некоторых фидов возникает вот такая ошибка:
Traceback (most recent call last):
File “test.py”, line 17, in <module>
sql = “UPDATE `feed` SET `feed_title` ='%s' AND `feed_description` ='%s' WHE
RE `feed_id` =%s” % (conx.escape_string(f.feed.get('title','')), conx.escape_str
ing(f.feed.get('description','')),'210')
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-4: ordin
al not in range(128)
Собственно сам код.
import feedparser, MySQLdb as db
conx = db.connect (host = “localhost”,user = “root”,passwd = “”,db = “db_test_feed”)
db_cursor = conx.cursor ()
db_cursor.execute('SET NAMES utf8')
db_cursor.execute('SET CHARACTER SET utf8')
f = feedparser.parse('http://feeds.feedburner.com/Radio-t')
sql = “UPDATE `feed` SET `feed_title` ='%s' AND `feed_description` ='%s' WHERE `feed_id` =%s” % (conx.escape_string(f.feed.get('title','')), conx.escape_string(f.feed.get('description','')),'210')
print sql
db_cursor.execute(sql)
Как исправить пообную ошибку? Заранее благодарен…
Офлайн
Попробуй указать кодировку в скрипте.
Офлайн
попробуй так:
# -*- coding: utf-8 -*-
import feedparser, MySQLdb as db
conx = db.connect (host = “localhost”,user = “root”,passwd = “”,db = “db_test_feed”)
db_cursor = conx.cursor ()
db_cursor.execute('SET NAMES utf8')
db_cursor.execute('SET CHARACTER SET utf8')
f = feedparser.parse('http://feeds.feedburner.com/Radio-t')
sql = u“UPDATE `feed` SET `feed_title` ='%s' AND `feed_description` ='%s' WHERE `feed_id` =%s” % (conx.escape_string(f.feed.get('title','')), conx.escape_string(f.feed.get('description','')),'210')
print sql
sql = sql.encode('utf-8')
db_cursor.execute(sql)
Офлайн
#так должно быть по идее
f.feed.get('description','').decode('utf8')
#так в реале
f.feed.get('description','').decode('latin1')
лично я непонимаю каким образом фидбернер умудрился перегнать страницу из утф8 в латин1 - но видимо такая у него по-умолчанию внутреняя кодировка
Отредактировано (Июль 1, 2008 12:43:20)
Офлайн