wer noch über keinen meiner zahlreichen Foreneintraege gestolpert ist: Aktuell versuche ich Feeds in einer MySQL Datenbank abzuspeichern, die ich zuvor von verschiedenen HP downloade. Mein Code funktioniert eigentlich, wirft mir aber folgenden Fehler aus:
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2026' in position 32: ordinal not in range(256)
Dieser Fehler kommt aber nicht automatisch sondern nach einiger Zeit (circa alle 6 Stunden und ich lade aktuell alle 4 Minuten eine Feedliste herunter). Bis zur Fehlermeldung funktioniert alles so wie es soll. Die Bedeutung des Fehlers ist mir vollkommen klar, was mir nicht klar ist, ist
1.) Wie kann ich den Fehler verhindern und wo genau vermutet ihr entsteht der Fehler?
2.) Kann ich eine Case in den Code einbauen, dass wenn dieser Fehler auftaucht, eine Fehlermessage ausgespuckt wird aber der Code dennoch wie gewohnt weiterarbeitet? Wenn ja habt ihr mir da ein Codebeispiel?
Hier ist mein aktueller Code:
Code: Alles auswählen
import feedparser
import urllib2
import cookielib
import MySQLdb
import time
import datetime
from cookielib import CookieJar
from urllib2 import urlopen
db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="root", # your username - SELECT * FROM mysql.user
passwd="*****", # your password
db="sentiment_analysis") # name of the data base
cur = db.cursor()
cur.execute("DROP TABLE IF EXISTS feeddata_iii")
cur.execute("DROP TABLE IF EXISTS feeddata_lse")
sql_iii = """CREATE TABLE feeddata_iii (III_ID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(III_ID),III_UnixTimesstamp integer,III_Timestamp varchar(255),III_Source varchar(255),III_Title varchar(255),III_Text TEXT,III_Link varchar(255),III_Epic varchar(255),III_CommentNr integer,III_Author varchar(255))"""
sql_lse = """CREATE TABLE feeddata_lse (LSE_ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(LSE_ID),LSE_UnixTimesstamp integer, LSE_Timestamp varchar(255), LSE_Source varchar(255), LSE_Title varchar(255), LSE_Text TEXT, LSE_Link varchar(255), LSE_Epic varchar(255), LSE_CommentNr integer, LSE_Author varchar(255))"""
cur.execute(sql_iii)
cur.execute(sql_lse)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar()))
opener.addheaders = [{'User-agent','Mozilla/5.0'}]
def feed_load_iii(feed_iii):
return [(time.time(),
entry.published,
'iii',
entry.title,
entry.summary,
entry.link,
(entry.link.split('=cotn:')[1]).split('.L&id=')[0],
(entry.link.split('.L&id=')[1]).split('&display=')[0],
entry.author)
for entry
in feedparser.parse(feed_iii).entries]
def feed_load_lse(feed_lse):
return [(time.time(),
entry.published,
'lse',
entry.title,
entry.summary,
entry.link,
(entry.link.split('?ShareTicker=')[1]).split('&post=')[0],
entry.link.split('&post=')[1],
entry.author)
for entry
in feedparser.parse(feed_lse).entries]
def main():
feed_url_iii = "http://www.iii.co.uk/site_wide_discussions/site_wide_rss2.epl"
feed_url_lse = "http://www.lse.co.uk/chat/recent/"
feed_iii = feed_load_iii(feed_url_iii)
feed_lse = feed_load_lse(feed_url_lse)
print 'Timestamp of first Comment in III Feed'
print feed_iii[1][1]
print 'Timestamp of first Comment in LSE Feed'
print feed_lse[1][1]
print 'Next Feed Load in 240 Seconds'
print '------------------------------'
for item in feed_iii:
cur.execute("""INSERT INTO feeddata_iii(III_UnixTimesstamp, III_Timestamp, III_Source, III_Title, III_Text, III_Link, III_Epic, III_CommentNr, III_Author) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)""",item)
db.commit()
for item in feed_lse:
cur.execute("""INSERT INTO feeddata_lse(LSE_UnixTimesstamp, LSE_Timestamp, LSE_Source, LSE_Title, LSE_Text, LSE_Link, LSE_Epic, LSE_CommentNr, LSE_Author) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)""",item)
db.commit()
if __name__ == "__main__":
while True:
main()
time.sleep(240)
Code: Alles auswählen
print feed_lse[1][1].encode('ascii', 'replace')
Da ich ein sehr sehr junger Programmierer bin, bitte ich euch, möglichst "einfach" zu antworten und dabei am besten mit Codebeispielen, damit ich verstehe was ihr meint
Wie immer gilt: HERZLICHEN DANK!