Utilisez pyodbc pour analyser les signets exportés par le navigateur Chrome et les enregistrer dans la base de données Microsoft Access

Exemple de blog sur l'analyse des signets et l'enregistrement dans une base de données Microsoft Access à l'aide de wxPython et pyodbc :
Ce blog montre comment utiliser les bibliothèques wxPython et pyodbc pour créer une application simple qui analyse les signets dans des fichiers HTML et les enregistre dans une base de données Microsoft Access. Grâce à cet exemple, vous pouvez apprendre à utiliser wxPython pour créer une interface utilisateur graphique et à utiliser pyodbc pour vous connecter et exploiter une base de données Microsoft Access.
C:\pythoncode\new\bookmarkstoaccess.py

Préparation

insérez la description de l'image ici
insérez la description de l'image ici

Avant de commencer, assurez-vous d'avoir installé les dépendances suivantes :

  • wxPython : utilisé pour créer des interfaces utilisateur graphiques.
  • pyodbc : utilisé pour interagir avec les bases de données Microsoft Access.
  • lxml : utilisé pour analyser les fichiers HTML.

Initialiser la connexion à la base de données

Tout d’abord, nous devons initialiser la connexion à la base de données. Dans cet exemple, nous utilisons une base de données Microsoft Access comme cible pour stocker les signets. Selon votre situation réelle, vous devez modifier db_pathla valeur de la variable par le chemin réel du fichier de base de données.

# 数据库连接信息
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()

Dans le code ci-dessus, nous utilisons pyodbc.connectla méthode pour créer une connexion à la base de données et utilisons l'objet de connexion renvoyé pour créer un objet curseur. Les curseurs sont utilisés pour exécuter des instructions SQL et obtenir les résultats des requêtes.

Vérifiez si la table existe

Avant que les données du signet ne soient enregistrées, nous devons vérifier si une table particulière existe dans la base de données. Si elle n'existe pas, nous utiliserons une instruction SQL pour créer la table. Voici un exemple de code qui vérifie l'existence d'une table :

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)")

Dans le code ci-dessus, nous définissons une table_existsméthode pour déterminer si la table existe en exécutant l'instruction SELECT et en interceptant les exceptions. Si la table n'existe pas, nous utilisons CREATE TABLEl'instruction pour créer 'bookmarks1'une table nommée .

Analyser les informations des favoris

Ensuite, nous devons analyser les informations du signet dans le fichier HTML. Dans cet exemple, nous utilisons la bibliothèque lxml pour analyser les fichiers HTML. Voici un exemple de code simple pour analyser les signets :

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

Le code ci-dessus ouvre le fichier HTML spécifié, utilise la bibliothèque lxml pour analyser le contenu du fichier et extrait le titre et le lien du signet. Ensuite, ajoutez chaque signet à bookmarksla liste en tant que dictionnaire.

enregistrer les signets dans la base de données

Enfin, nous enregistrons les informations de signets analysées dans une base de données Microsoft Access. Voici un exemple de code simple pour enregistrer des favoris :

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

    self.conn.commit()

Dans le code ci-dessus, nous utilisons INSERT INTOl'instruction pour insérer le titre et le lien de chaque signet dans 'bookmarks1'le tableau. Enfin, nous commitvalidons la transaction en appelant la méthode, en nous assurant que les données sont enregistrées dans la base de données.

Complétez le code et exécutez

Notez que le code ci-dessus n’est qu’une partie de l’exemple de code. Pour exécuter l'exemple de programme complet, assurez-vous que les bibliothèques requises sont importées correctement et que les objets et __name__ == '__main__'sont créés dans les conditions .wx.AppMyFrame

L’exemple de code complet peut être trouvé ci-dessous :

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()

Veuillez noter qu'avant d'exécuter, assurez-vous que les bibliothèques dépendantes requises ont été correctement installées et db_pathdéfinissez la variable sur le chemin réel de votre fichier de base de données.

Ce qui précède est un exemple simple montrant comment utiliser wxPython et pyodbc pour créer une application qui analyse les signets et les enregistre dans une base de données Microsoft Access. Vous pouvez le modifier et l'étendre selon vos besoins.

J'espère que ce blog vous sera utile ! Si vous avez des questions ou des doutes, n'hésitez pas à les poser.

Je suppose que tu aimes

Origine blog.csdn.net/winniezhang/article/details/132356354
conseillé
Classement