Integrera med databaser (SQL)
Förstå hur ni ansluter era scraping-skript till SQL-databaser, till exempel SQLite och PostgreSQL, för strukturerad datalagring.
Integrera med databaser (SQL) är en gratis lektion i Webbskrapning och botutveckling på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Webbskrapning och botutveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Webbskrapning och botutveckling innehåller totalt 4 lektioner.
SQL för lagring av insamlade data
Välkommen! När Ni har samlat in data från webben behöver Ni ett tillförlitligt sätt att lagra den. CSV- eller JSON-filer fungerar för mindre uppgifter, men databaser erbjuder stora fördelar för större och mer komplexa webbskrapningsprojekt.
I den här lektionen utforskar vi hur Ni integrerar Era Python-skript för webbskrapning med SQL-databaser som SQLite, en lättviktig filbaserad databas som passar perfekt för lokal utveckling.
Varför använda SQL-databaser?
Att lagra insamlade data i en SQL-databas ger betydande fördelar jämfört med enkel fillagring:
- Strukturerad lagring: Data organiseras i tabeller med definierade kolumner, vilket säkerställer konsekvens.
- Sökbarhet: Sök, filtrera och analysera enkelt Era data med SQL-frågor.
- Skalbarhet: Hantera stora datamängder mer effektivt än med platta filer.
- Dataintegritet: Tillämpa regler som förhindrar ogiltiga eller duplicerade dataposter.
Grunderna i SQL: tabeller, rader och kolumner
Tänk på en SQL-databas som en samling kalkylblad. Varje ”kalkylblad” kallas en tabell. Varje rad i ett kalkylblad är en rad (eller post) i en tabell, och varje kolumn är en kolumn (eller ett fält).
En tabell med namnet products kan till exempel ha kolumnerna name, price och url.
Ansluta till SQLite i Python
Python har en inbyggd modul, sqlite3, som gör att Ni kan interagera med SQLite-databaser. Först behöver Ni upprätta en anslutning.
Kör den här koden för att se hur Ni ansluter till och sedan stänger en databasfil med namnet 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()Skapa Er första tabell
När Ni har anslutit behöver Ni definiera datastrukturen. Det gör Ni genom att skapa en tabell med en SQL-sats av typen CREATE TABLE. Vi använder ett cursor-objekt för att köra SQL-kommandon.
Det här exemplet skapar en tabell med namnet products och kolumner för ID, namn, pris och 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()Infoga insamlade data
När Ni har skapat tabellen kan Ni börja lägga till de data som Ni har samlat in. SQL-satsen INSERT INTO används för detta. Det är mycket viktigt att använda parametriserade frågor (med platshållare som ?) för att förhindra sårbarheter för SQL-injektion.
Vi lägger till en enda produkt i tabellen.
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")Infoga flera poster effektivt
När Ni har många insamlade objekt som ska sparas kan det gå långsamt att infoga dem ett i taget. Metoden cursor.executemany() gör att Ni kan infoga flera rader med ett enda kommando, vilket gör processen mycket snabbare.
Ange en lista med tupler, där varje tupel motsvarar en rad som ska infogas.
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()Hantera befintliga data (uppdatera/ignorera)
Vad händer om Ni samlar in data som kanske redan finns i databasen? Vanligtvis har Ni två alternativ:
- Ignorera dubbletter: Använd SQL-syntaxen
INSERT OR IGNORE INTOom en unik begränsning (som vårurl TEXT UNIQUE) skulle brytas. - Uppdatera befintliga poster: Använd SQL-satsen
UPDATEför att ändra en befintlig post i stället för att infoga en ny, om en matchning hittas.
Vilken strategi Ni bör välja beror på om nya data ska skriva över gamla eller om gamla data helt enkelt ska behållas.
Robusta interaktioner: commit och close
Kom alltid ihåg att:
conn.commit(): Detta sparar Era ändringar (till exempel infogningar eller uppdateringar) i databasfilen. Utan detta kanske ändringarna inte sparas permanent!conn.close(): Stäng databasanslutningen när Ni är klara. Det frigör resurser och säkerställer dataintegriteten.- Felhantering: Omslut Era databasåtgärder med blocken
try...except...finallyför att fånga fel och se till att anslutningen alltid stängs, även om ett fel inträffar.
Snabb kontroll: infoga data med SQL
Ni har lärt Er hur man ansluter till en databas och infogar data. Vilken Python-metod passar bäst för att infoga många datarader i en SQL-tabell på en gång?
Repetition: SQL för beständig lagring
Bra jobbat! Nu förstår Ni grunderna i att integrera Era webbskrapningsskript med SQL-databaser.
Vi har gått igenom:
- Fördelarna med databaser för insamlade data.
- Att ansluta till SQLite med Pythons
sqlite3. - Att skapa tabeller med
CREATE TABLE. - Att infoga enstaka och flera poster med
INSERT INTOochexecutemany(). - Bästa praxis, som
commit()ochclose().
Den här kunskapen är avgörande för att bygga robusta och skalbara lösningar för webbskrapning!
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Integrera med databaser (SQL)” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Webbskrapning och botutveckling, inklusive ”Integrera med databaser (SQL)”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Webbskrapning och botutveckling innehåller totalt 4 lektioner.
Vad lär jag mig i ”Integrera med databaser (SQL)”?
Förstå hur ni ansluter era scraping-skript till SQL-databaser, till exempel SQLite och PostgreSQL, för strukturerad datalagring. Ni övar på Webbskrapning och botutveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Webbskrapning och botutveckling?
Du behöver inga förkunskaper. Utbildningen i Webbskrapning och botutveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Integrera med databaser (SQL)”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Webbskrapning och botutveckling-lektionen?
Ja. Varje Webbskrapning och botutveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Lagra data i CSV/JSON
- Integrera med databaser (SQL)
- Molnbaserade lagringslösningar
- Lagra data i NoSQL-databaser