Pengikisan Web dan Pembangunan Bot · Pelajaran

Mengintegrasikan dengan Pangkalan Data (SQL)

Fahami cara menyambungkan skrip pengikisan anda kepada pangkalan data SQL (contohnya SQLite dan PostgreSQL) untuk penyimpanan data berstruktur.

Pelajaran 2 daripada 411 langkah

Mengintegrasikan dengan Pangkalan Data (SQL) ialah pelajaran Pengikisan Web dan Pembangunan Bot percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pengikisan Web dan Pembangunan Bot, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pengikisan Web dan Pembangunan Bot merangkumi sejumlah 4 pelajaran.

SQL untuk Penyimpanan Data yang Dikikis

Selamat datang! Selepas mengumpulkan data daripada web, anda memerlukan cara yang boleh dipercayai untuk menyimpannya. Walaupun fail CSV atau JSON sesuai untuk tugasan kecil, pangkalan data menawarkan kelebihan yang hebat untuk projek pengikisan yang lebih besar dan kompleks.

Pelajaran ini menerangkan cara mengintegrasikan skrip pengikisan Python anda dengan pangkalan data SQL seperti SQLite, iaitu pangkalan data berasaskan fail yang ringan dan sesuai untuk pembangunan setempat.

Mengapa Menggunakan Pangkalan Data SQL?

Menyimpan data yang dikikis dalam pangkalan data SQL memberikan manfaat yang ketara berbanding penyimpanan fail biasa:

  • Penyimpanan Berstruktur: Data disusun dalam jadual dengan lajur yang ditetapkan, sekali gus memastikan ketekalan.
  • Kebolehcapaian Pertanyaan: Cari, tapis dan analisis data anda dengan mudah menggunakan pertanyaan SQL.
  • Kebolehskalaan: Kendalikan jumlah data yang besar dengan lebih cekap berbanding fail rata.
  • Integriti Data: Kuatkuasakan peraturan untuk menghalang entri data yang tidak sah atau pendua.

Asas SQL: Jadual, Baris dan Lajur

Anggap pangkalan data SQL seperti sekumpulan hamparan. Setiap 'hamparan' dipanggil jadual. Setiap baris dalam hamparan ialah baris (atau rekod) dalam jadual, manakala setiap lajur ialah lajur (atau medan).

Contohnya, jadual 'products' mungkin mempunyai lajur untuk name, price dan url.

Menyambung ke SQLite dalam Python

Python mempunyai modul terbina dalam, sqlite3, yang membolehkan anda berinteraksi dengan pangkalan data SQLite. Mula-mula, anda perlu mewujudkan sambungan.

Jalankan kod ini untuk melihat cara menyambung kepada dan kemudian menutup fail pangkalan data bernama scraped_data.db.

import sqlite3

def connect_to_db(db_name="scraped_data.db"):
    conn = None
    try:
        # Connects to the database file. If it doesn't exist, it creates it.
        conn = sqlite3.connect(db_name)
        print(f"Successfully connected to {db_name}")
    except sqlite3.Error as e:
        print(f"Database connection error: {e}")
    finally:
        if conn:
            # Always close the connection when done
            conn.close()
            print("Connection closed.")

if __name__ == "__main__":
    connect_to_db()

Mencipta Jadual Pertama Anda

Selepas disambungkan, anda perlu mentakrifkan struktur untuk data anda. Hal ini dilakukan dengan mencipta jadual menggunakan pernyataan SQL CREATE TABLE. Kita akan menggunakan objek cursor untuk melaksanakan arahan SQL.

Contoh ini mencipta jadual products dengan lajur ID, nama, harga dan URL.

import sqlite3

def create_products_table(db_name="scraped_data.db"):
    conn = None
    try:
        conn = sqlite3.connect(db_name)
        cursor = conn.cursor()
        # SQL command to create a table if it doesn't already exist
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS products (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                price REAL,
                url TEXT UNIQUE
            )
        """)
        conn.commit() # Save the changes to the database
        print("Table 'products' created or already exists.")
    except sqlite3.Error as e:
        print(f"Database error: {e}")
    finally:
        if conn:
            conn.close()

if __name__ == "__main__":
    create_products_table()

Memasukkan Data yang Dikikis

Selepas mencipta jadual, anda boleh mula menambahkan data yang telah anda kikis. Pernyataan SQL INSERT INTO digunakan untuk tujuan ini. Anda mesti menggunakan pertanyaan berparameter (dengan ruang letak ?) bagi mencegah kelemahan suntikan SQL.

Mari tambahkan satu produk ke dalam jadual kita.

import sqlite3

def insert_product(db_name="scraped_data.db", name="Sample Product", price=99.99, url="http://example.com/sample"):
    conn = None
    try:
        conn = sqlite3.connect(db_name)
        cursor = conn.cursor()
        # SQL to insert a single row
        cursor.execute("INSERT INTO products (name, price, url) VALUES (?, ?, ?)",
                       (name, price, url))
        conn.commit()
        print(f"Inserted product: {name}")
    except sqlite3.Error as e:
        print(f"Database error: {e}")
    finally:
        if conn:
            conn.close()

if __name__ == "__main__":
    # Ensure table exists before inserting
    conn_temp = sqlite3.connect("scraped_data.db")
    cursor_temp = conn_temp.cursor()
    cursor_temp.execute("""
        CREATE TABLE IF NOT EXISTS products (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            price REAL,
            url TEXT UNIQUE
        )
    """)
    conn_temp.commit()
    conn_temp.close()

    insert_product(name="Python Book", price=35.50, url="http://bookstore.com/python")

Memasukkan Berbilang Rekod dengan Cekap

Apabila anda mempunyai banyak item yang dikikis untuk disimpan, memasukkannya satu demi satu boleh menjadi lambat. Kaedah cursor.executemany() membolehkan anda memasukkan berbilang baris dengan satu arahan, lalu menjadikan proses itu lebih pantas.

Berikan satu senarai tuple, dengan setiap tuple mewakili satu baris yang akan dimasukkan.

import sqlite3

def insert_multiple_products(db_name="scraped_data.db", products_data=None):
    if products_data is None:
        products_data = [
            ("Mechanical Keyboard", 120.00, "http://shop.com/mech-kb"),
            ("Gaming Mouse", 65.99, "http://shop.com/gaming-mouse"),
            ("Webcam HD", 49.99, "http://shop.com/webcam")
        ]

    conn = None
    try:
        conn = sqlite3.connect(db_name)
        cursor = conn.cursor()
        # Use executemany for bulk inserts
        cursor.executemany("INSERT INTO products (name, price, url) VALUES (?, ?, ?)",
                           products_data)
        conn.commit()
        print(f"Inserted {len(products_data)} products.")
    except sqlite3.Error as e:
        print(f"Database error: {e}")
    finally:
        if conn:
            conn.close()

if __name__ == "__main__":
    # Ensure table exists before inserting
    conn_temp = sqlite3.connect("scraped_data.db")
    cursor_temp = conn_temp.cursor()
    cursor_temp.execute("""
        CREATE TABLE IF NOT EXISTS products (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            price REAL,
            url TEXT UNIQUE
        )
    """)
    conn_temp.commit()
    conn_temp.close()

    insert_multiple_products()

Mengendalikan Data Sedia Ada (Kemas Kini/Abaikan)

Bagaimana jika anda mengikis data yang mungkin sudah ada dalam pangkalan data anda? Secara umumnya, terdapat dua pilihan:

  • Abaikan Pendua: Gunakan sintaks SQL INSERT OR IGNORE INTO jika kekangan unik (seperti url TEXT UNIQUE kita) akan dilanggar.
  • Kemas Kini Data Sedia Ada: Gunakan pernyataan SQL UPDATE untuk mengubah suai rekod sedia ada dan bukannya memasukkan rekod baharu jika padanan ditemui.

Pemilihan strategi yang tepat bergantung pada sama ada data baharu patut menggantikan data lama atau data lama sekadar perlu dikekalkan.

Interaksi Kukuh: Commit dan Close

Sentiasa ingat untuk:

  • conn.commit(): Ini menyimpan perubahan anda (seperti sisipan atau kemas kini) ke dalam fail pangkalan data. Tanpanya, perubahan anda mungkin tidak dikekalkan!
  • conn.close(): Tutup sambungan pangkalan data apabila anda selesai. Tindakan ini membebaskan sumber dan memastikan integriti data.
  • Pengendalian Ralat: Balut operasi pangkalan data anda dalam blok try...except...finally untuk menangkap ralat dan memastikan sambungan sentiasa ditutup, walaupun ralat berlaku.

Semakan Pantas: Sisipan Data SQL

Anda telah mempelajari cara menyambung kepada pangkalan data dan memasukkan data. Kaedah Python manakah yang paling sesuai untuk memasukkan banyak baris data ke dalam jadual SQL sekaligus?

Imbas Kembali: SQL untuk Penyimpanan

Syabas! Kini anda memahami asas mengintegrasikan skrip pengikisan web dengan pangkalan data SQL.

Kita telah membincangkan:

  • Manfaat pangkalan data untuk data yang dikikis.
  • Menyambung ke SQLite menggunakan sqlite3 Python.
  • Mencipta jadual dengan CREATE TABLE.
  • Memasukkan rekod tunggal dan berbilang rekod menggunakan INSERT INTO dan executemany().
  • Amalan terbaik seperti commit() dan close().

Pengetahuan ini penting untuk membina penyelesaian pengikisan yang kukuh dan boleh diskalakan!

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Mengintegrasikan dengan Pangkalan Data (SQL)” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengikisan Web dan Pembangunan Bot, termasuk “Mengintegrasikan dengan Pangkalan Data (SQL)”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pengikisan Web dan Pembangunan Bot merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mengintegrasikan dengan Pangkalan Data (SQL)”?

Fahami cara menyambungkan skrip pengikisan anda kepada pangkalan data SQL (contohnya SQLite dan PostgreSQL) untuk penyimpanan data berstruktur. Anda berlatih Pengikisan Web dan Pembangunan Bot menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pengikisan Web dan Pembangunan Bot?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pengikisan Web dan Pembangunan Bot di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Mengintegrasikan dengan Pangkalan Data (SQL)” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pengikisan Web dan Pembangunan Bot ini?

Ya. Setiap pelajaran Pengikisan Web dan Pembangunan Bot menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyimpan Data dalam CSV/JSON
  2. Mengintegrasikan dengan Pangkalan Data (SQL)
  3. Penyelesaian Storan Awan
  4. Menyimpan Data dalam Pangkalan Data NoSQL
← Kembali ke Pengikisan Web dan Pembangunan Bot