2017-02-25 40 views
0

我一直在使用下面的代碼從Chrome歷史的副本,試圖提取URL,我一直在PyCharm寫這個:Python的URL拔牙

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

歡迎來到StackOverflow。如果您希望我們爲您提供幫助,則應在您的問題中包含原始的完整錯誤消息以及重現問題所需的所有代碼。例如,你是如何獲得'(u'https://stackoverflow.com/search',)'?它是'ccpp [4]'?不要讓我們猜測! –

回答

0

它不起作用,因爲您將元組傳遞給需要字符串的函數。 cursor.fetchall()返回元組(與ñ元素被表示爲ñ元組,因爲一排)的列表,所以你只需要得到包含在元組中的單個元素:

rows = cursor.fetchall() 
url = rows[4][0] 
0

源碼的fetchall方法返回一個列表,其中包含查詢結果中每行的一個項目。這些項目都是一個元組(類似於列表),其中包含該行的字段數據。所以:

ccpp # this is a list 
ccpp[4] # this is a tuple 

您可以告訴它是一個元組,因爲您打印的輸出顯示該元組。如果你想從第一列,'url'列的數據,你需要索引它(類似於你將如何列表):

ccpp[4][0] # get the first column of the fifth row