我一直在使用以下代码尝试从我的Chrome历史记录副本中提取网址,我一直在PyCharm中写这个:
import sqlite3
import os
PATH='C:\\Users\\%s\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\History - Copy' % os.environ.get('USERNAME')
HistCop = sqlite3.connect(PATH)
c = HistCop.cursor()
ccp = c.execute('SELECT url FROM urls ORDER BY "id" DESC LIMIT 5')
ccpp=ccp.fetchall()
print ccpp
我的主要目标是在浏览器中打开至少一个网址,但是当我使用代码时:
import webbrowser
url = ccpp[4]
webbrowser.open(url)
我最终得到了一个错误。我认为它不起作用,因为......
(u'https://stackoverflow.com/search',)
有一个" u"在它面前。
请让我知道为什么会发生这种情况,如果有办法摆脱它,或者是否有更好的方法来实现我的目标。
答案 0 :(得分:0)
它不起作用,因为你将一个元组传递给一个需要字符串的函数。 cursor.fetchall()
返回元组列表(因为 n 元素的行表示为 n -tuple),因此您只需要包含单个元素在元组中:
rows = cursor.fetchall()
url = rows[4][0]
答案 1 :(得分:0)
sqlite的fetchall
方法返回一个列表,其中包含查询结果中每行的项目。这些项目都是包含该行的字段数据的元组(类似于列表)。所以:
ccpp # this is a list
ccpp[4] # this is a tuple
你可以告诉它是一个元组,因为你打印的输出显示了这一点。如果您想要第一列中的数据,那么' url'列,您需要对其进行索引(类似于列表的方式):
ccpp[4][0] # get the first column of the fifth row