使用 pyodbc 解析chrome瀏覽器導出的書簽并保存到 Microsoft Access 數據庫

使用 wxPython 和 pyodbc 解析書簽并保存到 Microsoft Access 數據庫的示例博客:
本篇博客介紹了如何使用 wxPython 和 pyodbc 庫創建一個簡單的應用程序,用于解析 HTML 文件中的書簽并將其保存到 Microsoft Access 數據庫中。通過這個示例,您可以學習如何使用 wxPython 構建圖形用戶界面,以及如何使用 pyodbc 連接和操作 Microsoft Access 數據庫。
C:\pythoncode\new\bookmarkstoaccess.py

準備工作

在這里插入圖片描述
在這里插入圖片描述

在開始之前,請確保您已經安裝了以下依賴庫:

  • wxPython:用于創建圖形用戶界面。
  • pyodbc:用于與 Microsoft Access 數據庫進行交互。
  • lxml:用于解析 HTML 文件。

初始化數據庫連接

首先,我們需要初始化數據庫連接。在這個示例中,我們使用 Microsoft Access 數據庫作為存儲書簽的目標。根據您的實際情況,您需要修改 db_path 變量的值為實際的數據庫文件路徑。

# 數據庫連接信息
db_path = r'./database1.accdb'
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + db_path# 創建數據庫連接
self.conn = pyodbc.connect(conn_str)
self.cursor = self.conn.cursor()

在上述代碼中,我們使用 pyodbc.connect 方法創建一個數據庫連接,并使用返回的連接對象創建一個游標(cursor)對象。游標用于執行 SQL 語句和獲取查詢結果。

檢查表是否存在

在書簽數據保存之前,我們需要檢查數據庫中是否存在特定的表。如果不存在,我們將使用 SQL 語句創建該表。下面是一個檢查表是否存在的示例代碼:

def table_exists(self, cursor, table_name):try:cursor.execute(f"SELECT TOP 1 * FROM {table_name}")return Trueexcept pyodbc.Error:return False# 檢查并創建表
if not self.table_exists(self.cursor, 'bookmarks1'):self.cursor.execute("CREATE TABLE bookmarks1 (title TEXT, url TEXT, date1 TEXT, icon TEXT)")

在上述代碼中,我們定義了一個 table_exists 方法,通過執行 SELECT 語句并捕獲異常來判斷表是否存在。如果表不存在,我們使用 CREATE TABLE 語句創建名為 'bookmarks1' 的表。

解析書簽信息

接下來,我們需要解析 HTML 文件中的書簽信息。在本示例中,我們使用了 lxml 庫來解析 HTML 文件。以下是一個簡單的解析書簽的示例代碼:

def parseBookmarks(self, htmlfile):with open(htmlfile, 'r', encoding='utf-8') as f:dom = lxml.html.fromstring(f.read())titles = dom.xpath('//dt/a/text()')urls = dom.xpath('//dt/a/@href')bookmarks = []for title, url in zip(titles, urls):bm = {'title': title, 'url': url}bookmarks.append(bm)return bookmarks

上述代碼打開指定的 HTML 文件,使用 lxml 庫解析文件內容,并提取書簽的標題和鏈接。然后,將每個書簽以字典的形式添加到 bookmarks 列表中。

保存書簽到數據庫

最后,我們將解析的書簽信息保存到 Microsoft Access 數據庫中。以下是一個簡單的保存書簽的示例代碼:

def saveBookmarks(self, bookmarks):for bm in bookmarks:self.cursor.execute("INSERT INTO bookmarks1 (title, url) VALUES (?, ?)",(bm['title'], bm['url']))self.conn.commit()

在上述代碼中,我們使用 INSERT INTO 語句將每個書簽的標題和鏈接插入到 'bookmarks1' 表中。最后,我們通過調用 commit 方法提交事務,確保數據保存到數據庫。

完整代碼和運行

請注意,上述代碼只是示例代碼的一部分。要運行完整的示例程序,請確保已經正確導入所需的庫,并在 __name__ == '__main__' 的條件下創建 wx.AppMyFrame 對象。

完整的示例代碼可以在下面找到:

import wx
import pyodbc
import lxml.html
from pubsub import pub
# 其他代碼不變class MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, parent=None, title='Bookmark Parser')self.panel = wx.Panel(self)self.open_button = wx.Button(self.panel, label='Open...')self.open_button.Bind(wx.EVT_BUTTON, self.onOpen)# self.dbname = 'database1.accdb' # 需要修改為實際的Access數據庫路徑self.initDB() # 初始化數據庫連接        self.Show()# # 檢查表是否存在的函數def table_exists(self, cursor, table_name):try:cursor.execute(f"SELECT TOP 1 * FROM {table_name}")return Trueexcept pyodbc.Error:return False             def initDB(self):# 數據庫連接信息db_path = r'./database1.accdb'conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + db_path# 創建數據庫連接self.conn = pyodbc.connect(conn_str)self.cursor = self.conn.cursor()if not self.table_exists(self.cursor, 'bookmarks1'):self.cursor.execute("CREATE TABLE bookmarks1 (title TEXT, url TEXT, date1 TEXT, icon TEXT)")        # 如果表不存在則創建表# self.cursor.execute("CREATE TABLE bookmarks1 (title TEXT, url TEXT, date1 TEXT, icon TEXT)") def onOpen(self, event):with wx.FileDialog(self, "Open HTML file", wildcard="HTML files (*.htm)|*.htm",style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:if fileDialog.ShowModal() == wx.ID_CANCEL:return     # 用戶取消選擇# 用戶選擇了文件,獲取選擇的文件路徑pathname = fileDialog.GetPath()# 解析HTML,提取書簽信息bookmarks = self.parseBookmarks(pathname)# 寫入數據庫self.saveBookmarks(bookmarks)def parseBookmarks(self, htmlfile):with open(htmlfile, 'r', encoding='utf-8') as f:dom = lxml.html.fromstring(f.read())           titles = dom.xpath('//dt/a/text()')urls = dom.xpath('//dt/a/@href')bookmarks = []for title, url in zip(titles, urls):bm = {'title': title, 'url': url}bookmarks.append(bm)return bookmarks            def saveBookmarks(self, bookmarks):for bm in bookmarks:self.cursor.execute("INSERT INTO bookmarks1 (title, url ) VALUES (?, ?)",(bm['title'], bm['url']))self.conn.commit()if __name__ == '__main__':app = wx.App()frame = MyFrame()frame.Show()app.MainLoop()

請注意,在運行之前,請確保已經正確安裝了所需的依賴庫,并將 db_path 變量設置為您的實際數據庫文件路徑。

以上是一個簡單的示例,展示了如何使用 wxPython 和 pyodbc 創建一個解析書簽并保存到 Microsoft Access 數據庫的應用程序。您可以根據自己的需求進行修改和擴展。

希望本篇博客對您有所幫助!如果您有任何問題或疑問,請隨時提問。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41803.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41803.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41803.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Sklearn】基于梯度提升樹算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于梯度提升樹算法的數據分類預測(Excel可直接替換數據) 1.模型原理2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果1.模型原理 梯度提升樹(Gradient Boosting Trees)是一種集成學習方法,用于解決分類和回歸問題。它通過將多個弱學習器(通常…

ONNX版本YOLOV5-DeepSort (rknn版本已經Ready)

目錄 1. 前言 2. 儲備知識 3. 準備工作 4. 代碼修改的地方 5.結果展示 1. 前言 之前一直在忙著寫文檔,之前一直做分類,檢測和分割,現在看到跟蹤算法,花了幾天時間找代碼調試,看了看,展示效果比單純的檢…

手寫代碼-前端面試

GitHub:手寫代碼集合

HTTP響應狀態碼大全:從100到511,全面解析HTTP請求的各種情況

文章目錄 前言一、認識響應狀態碼1. 什么是HTTP響應狀態碼2. Http響應狀態碼的作用3. 優化和調試HTTP請求的建議 二、1xx 信息響應1. 認識http信息響應2. 常見的信息響應狀態碼 三、2xx 成功響應1. 認識HTTP成功響應2. 常見的成功響應狀態碼 四、3xx 重定向1. 認識http重定向2.…

【javascript】isNaN(‘2-1‘)結果為什么是true

在JavaScript中,isNaN函數用于檢查一個值是否為NaN(非數字)。當給定的值無法被解析為數字時,isNaN函數會返回true。 因此,使用isNaN(‘2-1’)進行判斷時,2-1’是一個字符串,它包含一個減號&…

github ssh配置

1、生成公鑰 用下面的命令生成公鑰 ssh-keygen -t rsa -b 4096 -C 郵箱 生成的公鑰默認在文件夾 ~/.ssh/ 下的 id_rsa.pub 2、在github配置本地的公鑰 先復制本地公鑰文件中的內容 cat ~/.ssh/id_rsa.pub 打開github的settings > SSH and GPG keys > new SSH key …

QT如何打包

目錄 1.windeployqt工具 2.工具位置 3.使用方法 4.注意事項 Qt Creator 默認以動態鏈接的方式生成可執行文件,該文件無法獨立運行,必須為其提供所需的動態鏈接庫。也就是說,只分享 Qt Creator 生成的可執行文件是不行的,必須將…

nginx部署時http接口正常,ws接口404

可以這么配置 map $http_upgrade $connection_upgrade {default upgrade; close; }upstream wsbackend{server ip1:port1;server ip2:port2;keepalive 1000; }server {listen 20038;location /{ proxy_http_version 1.1;proxy_pass http://wsbackend;proxy_redirect off;proxy…

C語言,malloc使用規范

malloc 是 C 語言中用于分配內存的函數。它的名稱是“memory allocation”的縮寫。malloc 是在 <stdlib.h> 頭文件中定義的。 malloc 的基本語法是&#xff1a; void* malloc(size_t size); 其中 size_t是要分配的字節數。如果分配成功&#xff0c;malloc返回一個指向分配…

什么是字體堆棧(font stack)?如何設置字體堆棧?

聚沙成塔每天進步一點點 ? 專欄簡介? 什么是字體堆棧&#xff08;Font Stack&#xff09;&#xff1f;? 如何設置字體堆棧&#xff1f;? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 …

【卷積神經網絡】卷積,池化,全連接

隨著計算機硬件的升級與性能的提高&#xff0c;運算量已不再是阻礙深度學習發展的難題。卷積神經網絡&#xff08;Convolution Neural Network&#xff0c;CNN&#xff09;是深度學習中一項代表性的工作&#xff0c;CNN 是受人腦對圖像的理解過程啟發而提出的模型&#xff0c;其…

【分類討論】CF1674 E

Problem - E - Codeforces 題意&#xff1a; 思路&#xff1a; 樣例&#xff1a; 這種分類討論的題&#xff0c;主要是去看答案的最終來源是哪幾種情況&#xff0c;這幾種情況得不重不漏 Code&#xff1a; #include <bits/stdc.h>#define int long longusing i64 lon…

淺談5G技術會給視頻監控行業帶來的一些變革情況

5G是第五代移動通信技術&#xff0c;能夠提供更高的帶寬和更快的傳輸速度&#xff0c;這將為視頻技術的發展帶來大量機會。隨著5G技術的逐步普及與商用&#xff0c;人們將能夠享受到更加流暢的高清視頻體驗&#xff0c;并且5G技術還擁有更低的延遲和更高的網絡容量。這些優勢不…

2023牛客暑期多校訓練營9-B Semi-Puzzle: Brain Storm

2023牛客暑期多校訓練營9-B Semi-Puzzle: Brain Storm https://ac.nowcoder.com/acm/contest/57363/B 文章目錄 2023牛客暑期多校訓練營9-B Semi-Puzzle: Brain Storm題意解題思路代碼 題意 解題思路 歐拉定理 a b ≡ { a b % φ ( p ) g c d ( a , p ) 1 a b g c d ( a ,…

GBU812-ASEMI新能源專用整流橋GBU812

編輯&#xff1a;ll GBU812-ASEMI新能源專用整流橋GBU812 型號&#xff1a;GBU812 品牌&#xff1a;ASEMI 封裝&#xff1a;GBU-4 恢復時間&#xff1a;&#xff1e;50ns 正向電流&#xff1a;80A 反向耐壓&#xff1a;1200V 芯片個數&#xff1a;4 引腳數量&#xff…

Linux系統調試——valgrind內存泄露檢測

代碼可能存在內存泄露怎么辦&#xff1f; 使用valgrind可以對代碼進行內存泄露檢測。 valgrind下載安裝 下載&#xff1a;https://www.valgrind.org/downloads/ 安裝&#xff1a; 1、tar –jxvf valgrind-3.21.0.tar.bz2 2、cd valgrind-3.21.0 3、./configure --prefix/ho…

elementUI date-picker 日期格式轉為 2023/08/08格式

<el-form-item label"基線日期:" prop"baselineDate"><el-date-pickertype"date"v-model"form.baselineDate"placeholder"選擇日期"format"yyyy/MM/dd"change"(date, type) > changeTime(date, …

Springboot 實踐(7)springboot添加html頁面,實現數據庫數據的訪問

前文講解&#xff0c;項目已經實現了數據庫Dao數據接口&#xff0c;并通過spring security數據實現了對系統資源的保護。本文重點講解Dao數據接口頁面的實現&#xff0c;其中涉及頁面導航欄、菜單欄及頁面信息欄3各部分。 1、創建html頁面 前文講解中&#xff0c;資源目錄已經…

使用愛校對提升公文材料準確性的必要性

在我們的工作中&#xff0c;公文材料的準確性往往決定了我們的工作效果。無論是內部的報告、計劃&#xff0c;還是外部的公告、通知&#xff0c;都需要準確無誤才能達到我們預期的效果。為此&#xff0c;我們需要使用強大的工具——愛校對&#xff0c;來提升公文材料的準確性。…

Linux(Ubuntu)系統臨時IP以及靜態IP配置(關閉、啟動網卡等操作)

1 Ubuntu臨時IP設置2 Ubuntu靜態IP設置3 多個網卡IP設置4 關閉、啟動網卡前提是Linux下的網絡橋接不能用,不能通過識別網卡來添加IP地址,只能通過靜態寫死的方式去設置IP 對于CentOS版本下的靜態IP的配置可以參考這篇 Linux系統靜態IP配置(CentOS) 1 Ubuntu臨時IP設置 Li…