2011-06-01 77 views
0

我正在創建這個程序。但我無法將它插入到sqlite3數據庫中。多維數組python

類蜘蛛(HTMLParser的):

def __init__(self, url): 

     HTMLParser.__init__(self) 
     req = urlopen(url) 
     self.feed(req.read()) 


    def handle_starttag(self, tag, attrs): 
     if tag == 'a' and attrs: 
      print "Found link => %s" % attrs[0][1] 
      cursor.execute("INSERT INTO queue VALUE((?), (?), (?))",(None, attrs[0][0], attrs[0][1])) 
      connection.commit() 

if __name__ == '__main__': 
    Spider(starturl) 

我認爲這個問題是在下面的行。

cursor.execute("INSERT INTO queue VALUE((?), (?), (?))",(None, attrs[0][0], attrs[0][1])) 

在此先感謝!

+0

拋出了什麼異常,以及如何初始化與數據庫的連接?你是否意識到,如果標籤是「a」,attrs列表可能具有除了「href」以外的其他屬性? – BenTrofatter 2011-06-01 00:23:40

+0

這裏是完整的代碼。 https://docs.google.com/leaf?id=0B-Ym4oI6v6bAYmZkNmNjNWEtY2IxNS00MjQyLWEwZjctZjk5YmRiMTJlZGFl&hl=en_US – Isuru 2011-06-01 00:41:41

回答

2

VALUES關鍵字是複數,而不是單數。您不必擺脫問號周圍的額外括號,但它們不是必需的。此外,您可以明確告訴SQL服務器您想直接插入到特定列中,而不是爲自動遞增主鍵傳遞無。

cursor.execute("INSERT INTO queue (url, desc) VALUES (?, ?)", (attrs[0][0], attrs[0][1])) 

話雖這麼說,你可能會在額外的測試拋出,以確保ATTRS [0] [0]實際上是HREF,否則你會堅持任何其他類,IDS,或DOM附加到標籤的事件作爲屬性。另外,由於attrs集合的格式類似於[('href', 'http://example.com')],所以說明並不是真的出來,所以你可以考慮重新命名你的數據庫列。