Wenn es um Reiseplanung, Wettbewerbsanalyse oder Forschungszwecke geht, kann das Scrapen von flugbezogenen Informationen aus Google Flights wichtige Erkenntnisse liefern. Hier finden Sie eine Schritt-für-Schritt-Anleitung zum Scrapen von Fluginformationen mit Python, Playwright und lxml-Bibliotheken.
Bevor Sie mit dem Scraping beginnen, sollten Sie sicherstellen, dass Sie die notwendigen Python-Bibliotheken installiert haben:
pip install playwright
Pip install lxml
Um Playwright zu verwenden, müssen Sie auch die Browser-Binärdateien installieren:
playwright install chromium
Wir konzentrieren uns auf das Extrahieren von Flugdaten aus der Suchergebnisseite von Google Flights.
Um Daten von Google Flights effektiv abzurufen, müssen Sie sich mit der HTML-Struktur der Website vertraut machen. Hier erfahren Sie, wie Sie Chrome DevTools verwenden können, um Elemente zu untersuchen und die erforderlichen XPath-Ausdrücke für das Scrapen abzurufen:
Liste der verwendeten XPath-Ausdrücke:
From Location: //input[@aria-label="Where from?"]/@value
To Location: //input[@aria-label="Where to?"]/@value
Departure Date: //input[@placeholder="Departure"]/@value
Return Date: //input[@placeholder="Return"]/@value
Hinweis: Dieser XPath liefert mehrere Elemente, die jeweils einem einzelnen Flug entsprechen.
Flight Elements: //li[@class="pIav2d"]
Airway: .//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()
Details: .//span[@class="mv1WYe"]/@aria-label
Departure Time: .//span[@aria-describedby="gEvJbfc1583"]/span/text()
Arrival Time: .//span[@aria-describedby="gEvJbfc1584"]/span/text()
Travel Time: .//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()
Price: .//div[@class="YMlIz FpEdX"]/span/text()
Wir verwenden Playwright, um mit der Webseite zu interagieren und ihren Inhalt zu extrahieren. Dieser Ansatz hilft bei der Handhabung dynamischer Inhalte, die von JavaScript geladen werden können.
Die Verwendung von Playwright erleichtert den Umgang mit dynamischen Inhalten, die von JavaScript geladen werden. Es startet einen Headless-Browser, navigiert zur URL und extrahiert den Seiteninhalt.
from playwright.sync_api import sync_playwright
# URL für die Suchseite von Google Flights
url = "https link"
def get_page_content(url):
"""Holt den HTML-Inhalt der angegebenen URL mit Playwright."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=True) # Browser im Headless-Modus starten
context = browser.new_context() # Erstellen Sie einen neuen Browser-Kontext
page = context.new_page() # Eine neue Seite öffnen
page.goto(url) # Zur angegebenen URL navigieren
content = page.content() # Abrufen des Seiteninhalts
browser.close() # Schließen Sie den Browser
return content
# Abrufen des Seiteninhalts
page_content = get_page_content(url)
Als Nächstes wird der HTML-Inhalt der Antwort mithilfe von lxml geparst, um allgemeine Flugdetails wie Abflug- und Rückflugdatum zu extrahieren.
from lxml import html
# Erstellen des Parsers
tree = html.fromstring(page_content)
# Extrahieren allgemeiner Flugdaten mit XPath
from_location = tree.xpath('//input[@aria-label="Where from?"]/@value')[0] # Abrufen des 'von'-Ortes
to_location = tree.xpath('//input[@aria-label="Where to?"]/@value')[0] # Abrufen des "bis"-Ortes
departure_date = tree.xpath('//input[@placeholder="Departure"]/@value')[0] # Das Abreisedatum abfragen
return_date = tree.xpath('//input[@placeholder="Return"]/@value')[0] # Abfrage des Rückgabedatums
Anschließend wird der HTML-Inhalt geparst, um spezifische Fluginformationen auf der Grundlage der identifizierten XPath-Ausdrücke zu extrahieren.
# Initialisieren einer leeren Liste zum Speichern von Flugdaten
flights = []
# Extrahieren von Flugelementen aus dem geparsten HTML mit XPath
flight_elements = tree.xpath('//li[@class="pIav2d"]')
# Schleife durch jedes Flugelement und Extraktion von Details
for flight in flight_elements:
# Extrahieren Sie den Namen der Fluggesellschaft
airway = flight.xpath('.//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()')[0].strip()
# Extrahieren von Flugdetails wie Zwischenlandungen
details = flight.xpath('.//span[@class="mv1WYe"]/@aria-label')[0]
# Extrahieren Sie die Abfahrtszeit
departure = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[0].strip()
# Extrahieren Sie die Ankunftszeit
arrival = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[1].strip()
# Extrahieren Sie die Gesamtreisezeit
travel_time = flight.xpath('.//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()')[0].strip()
# Extrahieren Sie den Preis des Fluges
price = flight.xpath('.//div[@class="U3gSDe"]/div/div[2]/span/text()')[0].strip()
# Anhängen der extrahierten Details an die Flugliste in Form eines Wörterbuchs
flights.append({
'Airway': airway,
'Details': details,
'Departure': departure,
'Arrival': arrival,
'Travel Time': travel_time,
'Price': price,
'From': from_location,
'To': to_location,
'Departure Date': departure_date,
'Return Date': return_date
})
Abschließend verwenden wir das in Python integrierte CSV-Modul, um die extrahierten Daten für die weitere Analyse in einer CSV-Datei zu speichern.
import csv
# CSV-Dateipfad definieren
csv_file = 'google_flights.csv'
# CSV-Feldnamen definieren
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']
# Daten in eine CSV-Datei schreiben
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for flight in flights:
writer.writerow(flight)
print(f"Data saved to {csv_file}")
from playwright.sync_api import sync_playwright
from lxml import html
import csv
# URL für die Suchseite von Google Flights
url = "https link"
def get_page_content(url):
"""Holt den HTML-Inhalt der angegebenen URL mit Playwright."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # Browser im Headful-Modus starten
context = browser.new_context() # Erstellen Sie einen neuen Browser-Kontext
page = context.new_page() # Eine neue Seite öffnen
page.goto(url) # Zur angegebenen URL navigieren
page.wait_for_timeout(10000) # Warten Sie 10 Sekunden, um sicherzustellen, dass die Seite vollständig geladen wird.
content = page.content() # Abrufen des Seiteninhalts
browser.close() # Schließen Sie den Browser
return content
# Abrufen des Seiteninhalts
page_content = get_page_content(url)
# Parsen des HTML-Inhalts mit lxml
tree = html.fromstring(page_content)
# Extrahieren von Details zur Flugsuche
from_location = tree.xpath('//input[@aria-label="Where from?"]/@value')[0]
to_location = tree.xpath('//input[@aria-label="Where to?"]/@value')[0]
departure_date = tree.xpath('//input[@placeholder="Departure"]/@value')[0]
return_date = tree.xpath('//input[@placeholder="Return"]/@value')[0]
# Initialisieren einer Liste zum Speichern von Flugdaten
flights = []
# Extrahieren von Flugelementen aus dem geparsten HTML
flight_elements = tree.xpath('//li[@class="pIav2d"]')
for flight in flight_elements:
airway = flight.xpath('.//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()')[0].strip()
details = flight.xpath('.//span[@class="mv1WYe"]/@aria-label')[0]
departure = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[0].strip()
arrival = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[1].strip()
travel_time = flight.xpath('.//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()')[0].strip()
price = flight.xpath('.//div[@class="U3gSDe"]/div/div[2]/span/text()')[0].strip()
# Flugdaten an die Liste anhängen
flights.append({
'Airway': airway,
'Details': details,
'Departure': departure,
'Arrival': arrival,
'Travel Time': travel_time,
'Price': price,
'From': from_location,
'To': to_location,
'Departure Date': departure_date,
'Return Date': return_date
})
# Definieren Sie den Pfad zur CSV-Datei
csv_file = 'google_flights.csv'
# CSV-Feldnamen definieren
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']
# Schreiben der extrahierten Flugdaten in eine CSV-Datei
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader() # Schreiben Sie die Kopfzeile
for flight in flights:
writer.writerow(flight) # Schreiben Sie die Details zu jedem Flug
print(f"Data saved to {csv_file}")
Um das Risiko einer Entdeckung beim Scraping von Daten zu verringern, ist es ratsam, Verzögerungen zwischen den Anfragen einzubauen und Proxys zu verwenden. Durch die Implementierung von Verzögerungen wird die menschliche Interaktion nachgeahmt, wodurch es für Websites schwieriger wird, automatisierte Scraping-Aktivitäten zu erkennen. Für die Auswahl des Proxys werden dynamische Proxys empfohlen, da sie ein hohes Maß an Vertrauen bieten und aufgrund ihrer dynamischen Natur weniger wahrscheinlich blockiert werden. Alternativ können Sie einen Pool von statischen ISP-Proxys verwenden, die eine stabile und schnelle Verbindung bieten und die Zuverlässigkeit Ihres Datenextraktionsprozesses erhöhen. Diese Strategien helfen dabei, die Schutzmaßnahmen zu umgehen, die Websites zur Identifizierung und Blockierung von Scraping-Bots einsetzen.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0