Backend med Python, Flask och Selenium
En grundlig och humaniserad genomgång på lätt svenska
Viktiga höjdpunkter
- Flask gör backend-utvecklingen enkel – hantering av HTTP-förfrågningar och kommunikation med frontend är smidigt.
- Selenium automatiserar webbläsaren – effektivt vid insamling av data från olika webbplatser.
- Fördröjning för fullständig laddning – säkerställer att all nödvändig data hämtas korrekt.
Introduktion
I detta inlägg kommer vi att gå igenom hur du kan bygga en robust backend med Python där du använder Flask som webbapplikationsramverk tillsammans med Selenium för att automatiskt hämta data från webben. Denna lösning är utformad för att vara lättförståelig och humaniserad, med tydliga steg och förklaringar av de olika delarna. Vi diskuterar också hur du säkerställer att hela webbsidor har laddats innan insamling av data påbörjas, vilket är särskilt viktigt när du hämtar information från e-handelswebbplatser.
Flask som backend-ramverk
Varför Flask?
Flask är en mikroramverk för Python som är väldigt populärt tack vare sin enkelhet och flexibilitet. Med Flask kan du enkelt skapa en webbtjänst som hanterar HTTP-förfrågningar, skickar svar, och kommunicerar med en frontend-applikation. Flask har en minimal struktur vilket gör att du snabbt kommer igång med att utveckla din applikation utan en komplex inlärningskurva.
Hantering av HTTP-förfrågningar
En av de stora fördelarna med Flask är hur hanteringen av HTTP-förfrågningar utförs. Du kan definiera olika endpoints som svarar på GET-, POST- eller andra typer av förfrågningar, vilket gör det lätt att bygga ett API som kan kommunicera smidigt med en frontend.
Med Flask kan du enkelt lägga till rutter med dekoratörer, som detta exempel:
# Exempel på en enkel Flask-rutt
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/data")
def get_data():
# Här kan du hämta och returnera data
data = {"meddelande": "Hej från Flask API"}
return jsonify(data)
if __name__ == "__main__":
app.run(debug=True)
Detta exempel visar hur du skapar en API-endpoint som kan vidarebefordra data till en frontend, vilket underlättar integrationen med andra system och tjänster.
Selenium för webautomatisering
Vad är Selenium?
Selenium är ett verktyg som används för att automatisera webbläsare. Med Selenium kan du programmera en webbläsare att navigera till specifika webbsidor, interagera med element, acceptera cookies, fylla i formulär och hämta information från sidorna. Detta är särskilt användbart när du behöver samla in data från externa källor, exempelvis e-handelsplatser.
Automatiserad datainsamling
Genom att använda Selenium kan du automatisera hela processen för att hämta data från en webbsida. Du kan till exempel:
- Navigera till webbplatsens startsida.
- Acceptera eventuella cookie-meddelanden.
- Vänta tills hela sidan har laddats, inklusive dynamiskt innehåll.
- Extrahera viktig data såsom produktnamn, priser och länkar.
Här är ett enkelt exempel på hur Selenium kan användas med Python:
# Exempel på hur du använder Selenium i Python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Initiera webbläsaren (exempelvis Chrome)
driver = webdriver.Chrome()
# Ladda webbsidan
driver.get("https://exempel-ehandel.se")
# Vänta tills sidan är helt laddad
time.sleep(5) # Förbättra genom att använda WebDriverWait vid behov
# Exempel på att hämta en produkt titel
product = driver.find_element(By.CLASS_NAME, "product-title")
print(product.text)
driver.quit()
I detta exempel öppnas webbsidan, väntar en bestämd tid för att säkerställa att allt innehåll laddats, och hämtar sedan texten från ett element med klassen "product-title". Den här metoden kan utökas för att hämta flera datafält från en eller flera sidor.
Betydelsen av att vänta på att sidan laddas
Säkerställa komplett datahämtning
När du använder Selenium är ett vanligt problem att webbsidor ibland inte är fullständigt laddade innan du börjar hämta data. Detta kan leda till att du får ofullständiga eller felaktiga data. För att hantera detta kan du implementera en funktion som väntar tills sidan är helt laddad innan datainsamlingen påbörjas.
Tekniker för att vänta
Det finns olika metoder för att implementera väntetider i Selenium. Det enklaste är att använda en fast tidsfördröjning med hjälp av "time.sleep()". Men ett mer robust alternativ är att använda "WebDriverWait" tillsammans med specifika förväntade tillstånd. Detta gör att du bara väntar så länge som behövs.
Exempel med WebDriverWait:
# Exempel på att använda WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10) # Vänta upp till 10 sekunder
element = wait.until(EC.presence_of_element_located((By.ID, "fullPageLoaded")))
I detta exempel väntar Selenium tills ett element med ID "fullPageLoaded" finns på sidan. Detta element kan exempelvis vara ett dolt signalvärde som läggs in i koden efter att all dynamisk data har laddats, vilket säkerställer att du inte missar någon information.
Humanisering av koden
Lättförståelig och läsbar kod
När man utvecklar backend-kod är det viktigt att göra koden lätt att förstå, både för dig själv och andra utvecklare som eventuellt ska arbeta med samma projekt i framtiden. Att använda beskrivande variabelnamn och funktioner är en central del av detta.
Tips för humanisering
Här är några tips för att humanisera din kod:
- Använd svenska termer – om du arbetar i en svensk miljö är det bra att använda svenska namn på variabler och funktioner.
- Beskrivande namn – välj namn som tydligt beskriver vad funktionen eller variabeln representerar. Till exempel, istället för "x" eller "data", använd "produktData" eller "prisLista".
- Korta och tydliga kommentarer – förklara kortfattat vad en kodsektion gör, vilket underlättar förståelsen för andra som läser din kod.
- Modularisera koden – dela upp koden i funktioner eller moduler med tydliga ansvarsområden.
- Undvik onödig komplexitet – håll koden enkel och fokuserad på sina huvuduppgifter.
Genom att följa dessa enkla riktlinjer blir din kod mer underhållbar och lättare att arbeta med. Detta ökar chanserna att andra utvecklare förstår ditt arbete vid framtida samarbeten eller kodgranskningar.
Integration av Flask och Selenium
En samlad lösning för datainsamling
När du kombinerar Flask och Selenium får du en mycket kraftfull lösning. Flask hanterar dina HTTP-förfrågningar och gör att du enkelt kan bygga en API som kan anropas från din frontend. Samtidigt låter Selenium dig hämta data från externa webbsidor på ett automatiserat sätt.
Exempel på integration
Tänk dig att du har en Flask-endpoint som kallar på en funktion som i sin tur använder Selenium för att hämta uppdaterade priser från flera olika e-handelsplatser. Så här kunde det se ut:
# Flask-endpoint som integrerar Selenium-funktionalitet
from flask import Flask, jsonify
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
app = Flask(__name__)
def hämta_pris_data():
# Initiera webbläsaren
driver = webdriver.Chrome()
driver.get("https://exempel-ehandel.se")
# Använd WebDriverWait för att säkerställa att sidan är fulladdad
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "fullPageLoaded")))
# Hämta produktdata
produkt_namn = driver.find_element(By.CLASS_NAME, "product-title").text
produkt_pris = driver.find_element(By.CLASS_NAME, "product-price").text
produkt_länk = driver.find_element(By.CLASS_NAME, "product-link").get_attribute("href")
driver.quit()
return {
"namn": produkt_namn,
"pris": produkt_pris,
"länk": produkt_länk
}
@app.route("/api/produkt")
def produkt_api():
data = hämta_pris_data()
return jsonify(data)
if __name__ == "__main__":
app.run(debug=True)
I detta exempel startar vi en Flask-tjänst som när "/api/produkt" anropas, använder Selenium för att navigera till en e-handelssida och samla in produktinformation. Detta möjliggör att data kan uppdateras i realtid, vilket är särskilt värdefullt för applikationer som behöver visa aktuella priser och lagerstatus.
En översiktlig tabell över teknologierna
| Teknologi | Användningsområde | Fördelar | Exempel på funktion |
|---|---|---|---|
| Flask | Backend-ramverk |
|
|
| Selenium | Automatisering av webbläsare |
|
|
| WebDriverWait | Synkronisering |
|
|
Avslutande tekniska detaljer
Integrationen och betydelsen av korrekta data
Att integrera Flask med Selenium bidrar till att skapa en pålitlig lösning för datainsamling. När du bygger en webbtjänst med dessa teknologier säkerställer du:
- Uppdaterade data: Genom att vänta på att sidan fullständigt laddas och hämta data via Selenium, kan du minimera risken att få ofullständig information.
- Automatisering: Automatiserade tester och datahämtning minimerar manuella steg och ökar effektiviteten.
- Användarvänlig backend: Flask gör att API:er är enkla att bygga, dokumentera och underhålla vilket underlättar vidareutveckling.
Genom att kombinera de olika delarna kan du skapa en robust backend-lösning som möter behoven för moderna applikationer. Detta är särskilt värdefullt om du behöver information i realtid, exempelvis priser och lagerstatus för produkter på e-handelsplattformar.
Sammanfattningsvis är en välstrukturerad backend, där teknologier som Flask och Selenium används tillsammans, inte bara en teknisk lösning utan också en investering i att göra processer mer effektiva och tillförlitliga för slutanvändare. Med en tydlig struktur och humaniserade kodexempel blir det dessutom lättare att både felsöka och vidareutveckla ditt projekt över tid.
Referenser
- Integrating Selenium with Flask for Web Automation - Toxigon
- Python + Flask + Selenium Automation Testing Management Platform - TesterHome
- DeepPyLab/Flask-E2E-Testing-Project on GitHub - GitHub
- Selenium for Web Scraping - Builtin
- Guide to Web Scraping With Selenium in 2025 - BrightData
Rekommenderade sökfrågor
Last updated March 19, 2025