2011-06-01 81 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')],所以说明并不是真的出来,所以你可以考虑重新命名你的数据库列。