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メソッドを使用してデータベース接続を作成し、返された接続オブジェクトを使用してカーソル オブジェクトを作成します。カーソルは、SQL ステートメントを実行し、クエリ結果を取得するために使用されます。

テーブルが存在するかどうかを確認する

ブックマーク データを保存する前に、特定のテーブルがデータベースに存在するかどうかを確認する必要があります。存在しない場合は、SQL ステートメントを使用してテーブルを作成します。テーブルの存在を確認するサンプル コードを次に示します。

def table_exists(self, cursor, table_name):
    try:
        cursor.execute(f"SELECT TOP 1 * FROM {
      
      table_name}")
        return True
    except 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_existsSELECT ステートメントを実行して例外をキャッチすることで、テーブルが存在するかどうかを判断するメソッドを定義しています。テーブルが存在しない場合は、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 True
        except 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 データベースに保存するアプリケーションを作成する方法を示す簡単な例です。ニーズに応じて変更および拡張できます。

このブログがお役に立てば幸いです! ご質問やご不明な点がございましたら、お気軽にお問い合わせください。

おすすめ

転載: blog.csdn.net/winniezhang/article/details/132356354