2013-02-25 11 views
6

nowego do pytona .... Próbuje parsera poprawnie dekodować do bazy danych sqlite, ale to po prostu nie działa :(TypeError: dekodowania Unicode nie jest obsługiwana

# coding: utf8 
from pysqlite2 import dbapi2 as sqlite3 
import urllib2 
from bs4 import BeautifulSoup 
from string import * 


conn = sqlite3.connect(':memory:') 
cursor = conn.cursor() 

# # create a table 
def createTable(): 
    cursor.execute("""CREATE TABLE characters 
         (rank INTEGER PRIMARY KEY, word TEXT, definition TEXT) 
        """) 


def insertChar(rank,word,definition): 
    cursor.execute("""INSERT INTO characters (rank,word,definition) 
         VALUES (?,?,?)""",(rank,word,definition)) 


def main(): 
    createTable() 

    # u = unicode("辣", "utf-8") 

    # insertChar(1,u,"123123123") 

    soup = BeautifulSoup(urllib2.urlopen('http://www.zein.se/patrick/3000char.html').read()) 
    # print (html_doc.prettify()) 

    tables = soup.blockquote.table 

    # print tables 

    rows = tables.find_all('tr') 
    result=[] 
    for tr in rows: 
     cols = tr.find_all('td') 
     character = [] 
     x = cols[0].string 
     y = cols[1].string 
     z = cols[2].string 
     xx = unicode(x, "utf-8") 
     yy = unicode(y , "utf-8") 
     zz = unicode(z , "utf-8") 
     insertChar(xx,yy,zz) 

    conn.commit() 

main() 

Wciąż dostaję działań następczych błąd: TypeError: decoding Unicode is not supported

WARNING:root:Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER. 
Traceback (most recent call last): 
    File "sqlitetestbed.py", line 64, in <module> 
    main() 
    File "sqlitetestbed.py", line 48, in main 
    xx = unicode(x, "utf-8") 


Traceback (most recent call last): 
File "sqlitetestbed.py", line 52, in <module> 
main() 
File "sqlitetestbed.py", line 48, in main 
insertChar(x,y,z) 
File "sqlitetestbed.py", line 20, in insertChar 
VALUES (?,?,?)""",(rank,word,definition)) 
pysqlite2.dbapi2.IntegrityError: datatype mismatch 

jestem prawdopodobnie robić coś ów naprawdę głupie ... :(Proszę mi powiedzieć, co robię źle ... Dzięki

+1

Ahhhh, Unicode. Zaczyna się zmora każdego pytona, dlaczego używasz 'unicode()'? użyj 'u" 博 人 "' i zrób to w sposób pytonowy. – Amelia

+0

@Hiroto proponujesz zastąpić kod literałami? – wRAR

+0

@ WRAR Miałem na myśli skomentowane części do wstawienia. Wywołania 'unicode()' w samym kodzie są zbędne i mimo to powodują błędy – Amelia

Odpowiedz

6

!jest już unicode, ponieważ pole cols[0].string zawiera unicode (podobnie jak documented).

+0

okej ... więc użyłem x zamiast xx teraz ... Otrzymuję 'Traceback (ostatnie ostatnie połączenie): Plik" sqlitetestbed.py ", wiersz 52, w główny() Plik "sqlitetestbed.py", wiersz 48, główny insertChar (x, y, z) Plik "sqlitetestbed.py", wiersz 20, w insertChar VALUES (?,?,?) "" ", (Pozycja, słowo, definicja)) 'Dlaczego to jest? – user805981

+0

@ user805981 jest to pełna wiadomość? – wRAR

+0

Właśnie zaktualizowałem pełną wiadomość. :) Dzięki za pomoc! – user805981

Powiązane problemy